Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP's SPL: Do its interfaces involving arrays cover all array properties?

Tags:

arrays

php

spl

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.

like image 322
Wilco Avatar asked Sep 28 '08 06:09

Wilco


3 Answers

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.

like image 104
Bob Fanger Avatar answered Nov 18 '22 04:11

Bob Fanger


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 
like image 25
rewbs Avatar answered Nov 18 '22 05:11

rewbs


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.

like image 3
Eran Galperin Avatar answered Nov 18 '22 06:11

Eran Galperin