Question

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.

Was it helpful?

Solution

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.

OTHER TIPS

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 

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top