Why is the class named UintArray, while the constants are named like UInt8? Even if PHP is case-insensitive, it would be nice for you to be consistent in capitalization.
UIntDefault = 0 seems weird to me. Why not define UIntDefault = UInt32, since that's what you mean? Why is the bitmask for UInt32 0xFFFFFFFE instead of 0xFFFFFFFF? That rounds your data to even numbers.
When defining $bit_masks, there is no obvious correspondence with the UIntn constants that were just defined. I suggest:
private static $bit_masks = array(
UInt8 => 0xFF,
UInt16 => 0xFFFF,
…
);
Why do offsets need to be sanitize()d? Do you not trust You want to validate the calleroffset, not sanitize it. I don't recommend trying to givemake sense of bad input, because garbage in = garbage out. Some languages interpret negative array indices as counting backwards from the end — maybe you offsetswant to do that are integers? But it's not idiomatic for PHP, so I recommend either emulating the standard behaviour for PHP arrays or explicitly failing.
The way you keep track of $current_count is buggy. In a normal array, you should be able to do $a = array(); $a[0] = "first"; $a[] = "second";. However, if you try that with your UintArray, the second entry will overwrite the first, because you only maintain a correct $current_count if you stick to the push()/pop()/offsetUnset() interface.
__sleep() is supposed to serialize the array, but you only serialize the data, and discard the type.