From 55ab0250bd17fb05bddb92eaf4ab77a0955d9a90 Mon Sep 17 00:00:00 2001 From: Levi Morrison Date: Fri, 6 Aug 2021 09:32:39 -0600 Subject: [PATCH] Deprecate many of the ArrayIterator methods that are aliases to ArrayObject ones These are needless, and cause problems (see some of the bugs lol). Generally if you want these methods, use an ArrayObject directly. I intend to _remove_ these and possibly more in PHP 9.0 so that ArrayIterator can be made efficient. --- ext/spl/spl_array.stub.php | 10 +++++++++ ext/spl/spl_array_arginfo.h | 22 +++++++++---------- ext/spl/tests/arrayIterator_ksort_basic1.phpt | 5 +++-- .../tests/arrayObject_getFlags_basic2.phpt | 4 ++-- ext/spl/tests/array_017.phpt | 10 +++++---- ext/spl/tests/bug46115.phpt | 3 ++- ext/spl/tests/bug67539.phpt | 7 +++++- 7 files changed, 40 insertions(+), 21 deletions(-) diff --git a/ext/spl/spl_array.stub.php b/ext/spl/spl_array.stub.php index d46fe4ed15b8..6e1b514ca09e 100644 --- a/ext/spl/spl_array.stub.php +++ b/ext/spl/spl_array.stub.php @@ -126,60 +126,70 @@ public function getArrayCopy(): array {} public function count(): int {} /** + * @deprecated * @tentative-return-type * @implementation-alias ArrayObject::getFlags */ public function getFlags(): int {} /** + * @deprecated * @tentative-return-type * @implementation-alias ArrayObject::setFlags */ public function setFlags(int $flags): void {} /** + * @deprecated * @tentative-return-type * @implementation-alias ArrayObject::asort */ public function asort(int $flags = SORT_REGULAR): bool {} /** + * @deprecated * @tentative-return-type * @implementation-alias ArrayObject::ksort */ public function ksort(int $flags = SORT_REGULAR): bool {} /** + * @deprecated * @tentative-return-type * @implementation-alias ArrayObject::uasort */ public function uasort(callable $callback): bool {} /** + * @deprecated * @tentative-return-type * @implementation-alias ArrayObject::uksort */ public function uksort(callable $callback): bool {} /** + * @deprecated * @tentative-return-type * @implementation-alias ArrayObject::natsort */ public function natsort(): bool {} /** + * @deprecated * @tentative-return-type * @implementation-alias ArrayObject::natcasesort */ public function natcasesort(): bool {} /** + * @deprecated * @tentative-return-type * @implementation-alias ArrayObject::unserialize */ public function unserialize(string $data): void {} /** + * @deprecated * @tentative-return-type * @implementation-alias ArrayObject::serialize */ diff --git a/ext/spl/spl_array_arginfo.h b/ext/spl/spl_array_arginfo.h index 110882bbd369..745451e18fd2 100644 --- a/ext/spl/spl_array_arginfo.h +++ b/ext/spl/spl_array_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: e8e9909c2548a2259ba58ecf9f2ad6fe5add70f4 */ + * Stub hash: aea359465f8fd8c8c5eabc998a36e90628432db9 */ ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject___construct, 0, 0, 0) ZEND_ARG_TYPE_MASK(0, array, MAY_BE_ARRAY|MAY_BE_OBJECT, "[]") @@ -228,16 +228,16 @@ static const zend_function_entry class_ArrayIterator_methods[] = { ZEND_MALIAS(ArrayObject, append, append, arginfo_class_ArrayIterator_append, ZEND_ACC_PUBLIC) ZEND_MALIAS(ArrayObject, getArrayCopy, getArrayCopy, arginfo_class_ArrayIterator_getArrayCopy, ZEND_ACC_PUBLIC) ZEND_MALIAS(ArrayObject, count, count, arginfo_class_ArrayIterator_count, ZEND_ACC_PUBLIC) - ZEND_MALIAS(ArrayObject, getFlags, getFlags, arginfo_class_ArrayIterator_getFlags, ZEND_ACC_PUBLIC) - ZEND_MALIAS(ArrayObject, setFlags, setFlags, arginfo_class_ArrayIterator_setFlags, ZEND_ACC_PUBLIC) - ZEND_MALIAS(ArrayObject, asort, asort, arginfo_class_ArrayIterator_asort, ZEND_ACC_PUBLIC) - ZEND_MALIAS(ArrayObject, ksort, ksort, arginfo_class_ArrayIterator_ksort, ZEND_ACC_PUBLIC) - ZEND_MALIAS(ArrayObject, uasort, uasort, arginfo_class_ArrayIterator_uasort, ZEND_ACC_PUBLIC) - ZEND_MALIAS(ArrayObject, uksort, uksort, arginfo_class_ArrayIterator_uksort, ZEND_ACC_PUBLIC) - ZEND_MALIAS(ArrayObject, natsort, natsort, arginfo_class_ArrayIterator_natsort, ZEND_ACC_PUBLIC) - ZEND_MALIAS(ArrayObject, natcasesort, natcasesort, arginfo_class_ArrayIterator_natcasesort, ZEND_ACC_PUBLIC) - ZEND_MALIAS(ArrayObject, unserialize, unserialize, arginfo_class_ArrayIterator_unserialize, ZEND_ACC_PUBLIC) - ZEND_MALIAS(ArrayObject, serialize, serialize, arginfo_class_ArrayIterator_serialize, ZEND_ACC_PUBLIC) + ZEND_MALIAS(ArrayObject, getFlags, getFlags, arginfo_class_ArrayIterator_getFlags, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED) + ZEND_MALIAS(ArrayObject, setFlags, setFlags, arginfo_class_ArrayIterator_setFlags, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED) + ZEND_MALIAS(ArrayObject, asort, asort, arginfo_class_ArrayIterator_asort, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED) + ZEND_MALIAS(ArrayObject, ksort, ksort, arginfo_class_ArrayIterator_ksort, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED) + ZEND_MALIAS(ArrayObject, uasort, uasort, arginfo_class_ArrayIterator_uasort, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED) + ZEND_MALIAS(ArrayObject, uksort, uksort, arginfo_class_ArrayIterator_uksort, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED) + ZEND_MALIAS(ArrayObject, natsort, natsort, arginfo_class_ArrayIterator_natsort, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED) + ZEND_MALIAS(ArrayObject, natcasesort, natcasesort, arginfo_class_ArrayIterator_natcasesort, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED) + ZEND_MALIAS(ArrayObject, unserialize, unserialize, arginfo_class_ArrayIterator_unserialize, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED) + ZEND_MALIAS(ArrayObject, serialize, serialize, arginfo_class_ArrayIterator_serialize, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED) ZEND_MALIAS(ArrayObject, __serialize, __serialize, arginfo_class_ArrayIterator___serialize, ZEND_ACC_PUBLIC) ZEND_MALIAS(ArrayObject, __unserialize, __unserialize, arginfo_class_ArrayIterator___unserialize, ZEND_ACC_PUBLIC) ZEND_ME(ArrayIterator, rewind, arginfo_class_ArrayIterator_rewind, ZEND_ACC_PUBLIC) diff --git a/ext/spl/tests/arrayIterator_ksort_basic1.phpt b/ext/spl/tests/arrayIterator_ksort_basic1.phpt index 642827a28f8b..26ffd513a1ab 100644 --- a/ext/spl/tests/arrayIterator_ksort_basic1.phpt +++ b/ext/spl/tests/arrayIterator_ksort_basic1.phpt @@ -9,9 +9,10 @@ var_dump($arrIter->ksort()); var_dump($arrIter); ?> ---EXPECT-- +--EXPECTF-- +Deprecated: Method ArrayIterator::ksort() is deprecated in %s on line %d bool(true) -object(ArrayIterator)#1 (1) { +object(ArrayIterator)#%d (1) { ["storage":"ArrayIterator":private]=> array(3) { [1]=> diff --git a/ext/spl/tests/arrayObject_getFlags_basic2.phpt b/ext/spl/tests/arrayObject_getFlags_basic2.phpt index db44322d674f..84421139a66d 100644 --- a/ext/spl/tests/arrayObject_getFlags_basic2.phpt +++ b/ext/spl/tests/arrayObject_getFlags_basic2.phpt @@ -7,10 +7,10 @@ var_dump($ao->getFlags()); $ao2 = new ArrayObject($ao); var_dump($ao2->getFlags()); -var_dump($ao2->getIterator()->getFlags()); +@var_dump($ao2->getIterator()->getFlags()); $ai = new ArrayIterator($ao); -var_dump($ai->getFlags()); +@var_dump($ai->getFlags()); $ao2 = new ArrayObject($ao, 0); var_dump($ao2->getFlags()); diff --git a/ext/spl/tests/array_017.phpt b/ext/spl/tests/array_017.phpt index fb152543d7e2..4b8a49318183 100644 --- a/ext/spl/tests/array_017.phpt +++ b/ext/spl/tests/array_017.phpt @@ -19,15 +19,17 @@ class ArrayIteratorEx extends ArrayIterator function dump() { echo __METHOD__ . "()\n"; - var_dump(array('Flags'=>$this->getFlags() - ,'OVars'=>get_object_vars($this) - ,'$this'=>$this)); + var_dump([ + 'Flags' => @$this->getFlags(), + 'OVars' => get_object_vars($this), + '$this' => $this, + ]); } function setFlags($flags): void { echo __METHOD__ . "($flags)\n"; - ArrayIterator::setFlags($flags); + @ArrayIterator::setFlags($flags); } } diff --git a/ext/spl/tests/bug46115.phpt b/ext/spl/tests/bug46115.phpt index 71207d8a25ee..72ac79667864 100644 --- a/ext/spl/tests/bug46115.phpt +++ b/ext/spl/tests/bug46115.phpt @@ -7,5 +7,6 @@ $x = new reflectionmethod('RecursiveArrayIterator', 'asort'); $z = $x->invoke($h); ?> DONE ---EXPECT-- +--EXPECTF-- +Deprecated: Method ArrayIterator::asort() is deprecated in %s on line %d DONE diff --git a/ext/spl/tests/bug67539.phpt b/ext/spl/tests/bug67539.phpt index 61f70cf459bd..03abc0682fec 100644 --- a/ext/spl/tests/bug67539.phpt +++ b/ext/spl/tests/bug67539.phpt @@ -16,5 +16,10 @@ function badsort($a, $b) { $it->uksort('badsort'); ?> ---EXPECT-- +--EXPECTF-- +Deprecated: Method ArrayIterator::uksort() is deprecated in %s on line %d + +Deprecated: Method ArrayIterator::serialize() is deprecated in %s on line %d + +Deprecated: Method ArrayIterator::unserialize() is deprecated in %s on line %d Modification of ArrayObject during sorting is prohibited