The ArrayObject class is only rarely used at the moment due to a lack
for almost all array_* functions beside the sort functions.
Currently implemented by ArrayObject:
https://www.php.net/manual/en/class.arrayobject.php
Missing methods that would be most useful:
array_chunk
array_column
array_diff_assoc
array_diff_key
array_diff_uassoc
array_diff_ukey
array_diff
array_filter
array_flip
array_intersect_assoc
array_intersect_key
array_intersect_uassoc
array_intersect_ukey
array_intersect
array_key_first
array_key_last
array_keys
array_map
array_merge
array_pop
array_push
array_rand
array_reduce
array_replace_recursive
array_replace
array_reverse
array_search
array_shift
array_slice
array_splice
array_unique
array_unshift
array_values
shuffle
Furthermore, the already existing sort functions return VOID, which
isn't best for an object. Instead, returning the ArrayObject itself to
support a fluid interface would be much better, i.e.:
$ao = new \ArrayObject([null, 'a' => 2, 'b' => 1]);
$ao->filter()->sort()->flip();
This change wouldn't break any existing code already using the ArrayObject.
It should be possible to extend from ArrayObject too and have access to
the internal array. Therefore, a new method would be required:
protected getArrayRef() : array
The method is similar to the existing getArrayCopy() method but returns
a reference to the internal array instead of a copy. Thus, classes
extending ArrayObject will be able to implement additional methods
efficiently without the need to create copies of the internal array first.
On Sun, Nov 24, 2019, 13:16 Aimeos | Norbert Sendetzky norbert@aimeos.com
wrote:
The ArrayObject class is only rarely used at the moment due to a lack
for almost all array_* functions beside the sort functions.Currently implemented by ArrayObject:
https://www.php.net/manual/en/class.arrayobject.phpMissing methods that would be most useful:
array_chunk
array_column
array_diff_assoc
array_diff_key
array_diff_uassoc
array_diff_ukey
array_diff
array_filter
array_flip
array_intersect_assoc
array_intersect_key
array_intersect_uassoc
array_intersect_ukey
array_intersect
array_key_first
array_key_last
array_keys
array_map
array_merge
array_pop
array_push
array_rand
array_reduce
array_replace_recursive
array_replace
array_reverse
array_search
array_shift
array_slice
array_splice
array_unique
array_unshift
array_values
shuffleFurthermore, the already existing sort functions return VOID, which
isn't best for an object. Instead, returning the ArrayObject itself to
support a fluid interface would be much better, i.e.:$ao = new \ArrayObject([null, 'a' => 2, 'b' => 1]);
$ao->filter()->sort()->flip();This change wouldn't break any existing code already using the ArrayObject.
It should be possible to extend from ArrayObject too and have access to
the internal array. Therefore, a new method would be required:protected getArrayRef() : array
The method is similar to the existing getArrayCopy() method but returns
a reference to the internal array instead of a copy. Thus, classes
extending ArrayObject will be able to implement additional methods
efficiently without the need to create copies of the internal array first.--
To unsubscribe, visit: http://www.php.net/unsub.ph
http://www.php.net/unsub.php
Ouff, please don't extend ArrayObject
: it is very quirky and keeps state
in a way that is very much untransparent to userland: please use
ArrayAccess
instead.
Even then, the various array_
functions that mutate/map/filter would need
to produce equivalent data structures by knowing the ctor of your
array-alike object: better leave them alone, unless the output is a core
array
again