Reputation: 33356
Would it be possible to write a class that is virtually indistinguishable from an actual PHP array by implementing all the necessary SPL interfaces? Are they missing anything that would be critical?
I'd like to build a more advanced Array object, but I want to make sure I wouldn't break an existing app that uses arrays everywhere if I substituted them with a custom Array class.
Upvotes: 6
Views: 639
Reputation: 86805
Other differences include the '+' operator for arrays (merging) and the failure of the entire array_*
functions, including the commonly used array_merge
and array_shift
.
Upvotes: 3
Reputation: 1990
In addition to the points made above, you would not be able to make user-space array type hints work with instances of your class. For example:
<?php
function f(array $a) { /*...*/ }
$ao = new ArrayObject();
f($ao); //error
?>
Output:
Catchable fatal error: Argument 1 passed to f() must be an array, object given
Upvotes: 4
Reputation: 29897
The only problems i can think of are the gettype() and the is_array() functions. Check your code for
gettype($FakeArray) == 'array'
is_array($FakeArray)
Because although you can use the object just like an array, it will still be identified as an object.
Upvotes: 7