Hi all,
Looking at code of PHPUnit, I stumbled upon an inconsistent array
conversion:
------
/**
* @param ArrayAccess|array $other
*/
function evaluate($other)
{
// type cast $other as an array to allow
//support in standard array functions.
if ($other instanceof ArrayAccess) {
$data = (array) $data;
}
$patched = array_replace_recursive($other, $this->subset);
// ...
}
-----
This would work only for `ArrayAccess` implementations extending
`ArrayObject` as shown by https://3v4l.org/ti4aY
Looking at the manual
http://php.net/manual/en/language.types.array.php#language.types.array.casting
,
it seems `ArrayObject` class does not comply to array casting because
integer public properties could also be retrieved. Some tests showed that
regular class always have string keys even when a `$key = 0; $this->{$key}
= 'avalue';` is called. In this case, `var_export((array)$object);` returns
`array('0' => 'avalue')` (Notice the quote around key 0 -
https://3v4l.org/6QW70)
What do you think of adding an optional `__toArray()` method to classes
which would default to current behavior but would allow specifying
behavior. The way of internal `__toString()` method and could explain
inconsistency of the `ArrayObject` class?
Regards,
Benoît Burnichon