Skip to content

Commit 2b37860

Browse files
committed
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.
1 parent f2d3e75 commit 2b37860

7 files changed

+40
-21
lines changed

ext/spl/spl_array.stub.php

+10
Original file line numberDiff line numberDiff line change
@@ -126,60 +126,70 @@ public function getArrayCopy(): array {}
126126
public function count(): int {}
127127

128128
/**
129+
* @deprecated
129130
* @tentative-return-type
130131
* @implementation-alias ArrayObject::getFlags
131132
*/
132133
public function getFlags(): int {}
133134

134135
/**
136+
* @deprecated
135137
* @tentative-return-type
136138
* @implementation-alias ArrayObject::setFlags
137139
*/
138140
public function setFlags(int $flags): void {}
139141

140142
/**
143+
* @deprecated
141144
* @tentative-return-type
142145
* @implementation-alias ArrayObject::asort
143146
*/
144147
public function asort(int $flags = SORT_REGULAR): bool {}
145148

146149
/**
150+
* @deprecated
147151
* @tentative-return-type
148152
* @implementation-alias ArrayObject::ksort
149153
*/
150154
public function ksort(int $flags = SORT_REGULAR): bool {}
151155

152156
/**
157+
* @deprecated
153158
* @tentative-return-type
154159
* @implementation-alias ArrayObject::uasort
155160
*/
156161
public function uasort(callable $callback): bool {}
157162

158163
/**
164+
* @deprecated
159165
* @tentative-return-type
160166
* @implementation-alias ArrayObject::uksort
161167
*/
162168
public function uksort(callable $callback): bool {}
163169

164170
/**
171+
* @deprecated
165172
* @tentative-return-type
166173
* @implementation-alias ArrayObject::natsort
167174
*/
168175
public function natsort(): bool {}
169176

170177
/**
178+
* @deprecated
171179
* @tentative-return-type
172180
* @implementation-alias ArrayObject::natcasesort
173181
*/
174182
public function natcasesort(): bool {}
175183

176184
/**
185+
* @deprecated
177186
* @tentative-return-type
178187
* @implementation-alias ArrayObject::unserialize
179188
*/
180189
public function unserialize(string $data): void {}
181190

182191
/**
192+
* @deprecated
183193
* @tentative-return-type
184194
* @implementation-alias ArrayObject::serialize
185195
*/

ext/spl/spl_array_arginfo.h

+11-11
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/* This is a generated file, edit the .stub.php file instead.
2-
* Stub hash: e8e9909c2548a2259ba58ecf9f2ad6fe5add70f4 */
2+
* Stub hash: aea359465f8fd8c8c5eabc998a36e90628432db9 */
33

44
ZEND_BEGIN_ARG_INFO_EX(arginfo_class_ArrayObject___construct, 0, 0, 0)
55
ZEND_ARG_TYPE_MASK(0, array, MAY_BE_ARRAY|MAY_BE_OBJECT, "[]")
@@ -228,16 +228,16 @@ static const zend_function_entry class_ArrayIterator_methods[] = {
228228
ZEND_MALIAS(ArrayObject, append, append, arginfo_class_ArrayIterator_append, ZEND_ACC_PUBLIC)
229229
ZEND_MALIAS(ArrayObject, getArrayCopy, getArrayCopy, arginfo_class_ArrayIterator_getArrayCopy, ZEND_ACC_PUBLIC)
230230
ZEND_MALIAS(ArrayObject, count, count, arginfo_class_ArrayIterator_count, ZEND_ACC_PUBLIC)
231-
ZEND_MALIAS(ArrayObject, getFlags, getFlags, arginfo_class_ArrayIterator_getFlags, ZEND_ACC_PUBLIC)
232-
ZEND_MALIAS(ArrayObject, setFlags, setFlags, arginfo_class_ArrayIterator_setFlags, ZEND_ACC_PUBLIC)
233-
ZEND_MALIAS(ArrayObject, asort, asort, arginfo_class_ArrayIterator_asort, ZEND_ACC_PUBLIC)
234-
ZEND_MALIAS(ArrayObject, ksort, ksort, arginfo_class_ArrayIterator_ksort, ZEND_ACC_PUBLIC)
235-
ZEND_MALIAS(ArrayObject, uasort, uasort, arginfo_class_ArrayIterator_uasort, ZEND_ACC_PUBLIC)
236-
ZEND_MALIAS(ArrayObject, uksort, uksort, arginfo_class_ArrayIterator_uksort, ZEND_ACC_PUBLIC)
237-
ZEND_MALIAS(ArrayObject, natsort, natsort, arginfo_class_ArrayIterator_natsort, ZEND_ACC_PUBLIC)
238-
ZEND_MALIAS(ArrayObject, natcasesort, natcasesort, arginfo_class_ArrayIterator_natcasesort, ZEND_ACC_PUBLIC)
239-
ZEND_MALIAS(ArrayObject, unserialize, unserialize, arginfo_class_ArrayIterator_unserialize, ZEND_ACC_PUBLIC)
240-
ZEND_MALIAS(ArrayObject, serialize, serialize, arginfo_class_ArrayIterator_serialize, ZEND_ACC_PUBLIC)
231+
ZEND_MALIAS(ArrayObject, getFlags, getFlags, arginfo_class_ArrayIterator_getFlags, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
232+
ZEND_MALIAS(ArrayObject, setFlags, setFlags, arginfo_class_ArrayIterator_setFlags, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
233+
ZEND_MALIAS(ArrayObject, asort, asort, arginfo_class_ArrayIterator_asort, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
234+
ZEND_MALIAS(ArrayObject, ksort, ksort, arginfo_class_ArrayIterator_ksort, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
235+
ZEND_MALIAS(ArrayObject, uasort, uasort, arginfo_class_ArrayIterator_uasort, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
236+
ZEND_MALIAS(ArrayObject, uksort, uksort, arginfo_class_ArrayIterator_uksort, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
237+
ZEND_MALIAS(ArrayObject, natsort, natsort, arginfo_class_ArrayIterator_natsort, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
238+
ZEND_MALIAS(ArrayObject, natcasesort, natcasesort, arginfo_class_ArrayIterator_natcasesort, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
239+
ZEND_MALIAS(ArrayObject, unserialize, unserialize, arginfo_class_ArrayIterator_unserialize, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
240+
ZEND_MALIAS(ArrayObject, serialize, serialize, arginfo_class_ArrayIterator_serialize, ZEND_ACC_PUBLIC|ZEND_ACC_DEPRECATED)
241241
ZEND_MALIAS(ArrayObject, __serialize, __serialize, arginfo_class_ArrayIterator___serialize, ZEND_ACC_PUBLIC)
242242
ZEND_MALIAS(ArrayObject, __unserialize, __unserialize, arginfo_class_ArrayIterator___unserialize, ZEND_ACC_PUBLIC)
243243
ZEND_ME(ArrayIterator, rewind, arginfo_class_ArrayIterator_rewind, ZEND_ACC_PUBLIC)

ext/spl/tests/arrayIterator_ksort_basic1.phpt

+3-2
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ var_dump($arrIter->ksort());
99
var_dump($arrIter);
1010

1111
?>
12-
--EXPECT--
12+
--EXPECTF--
13+
Deprecated: Method ArrayIterator::ksort() is deprecated in %s on line %d
1314
bool(true)
14-
object(ArrayIterator)#1 (1) {
15+
object(ArrayIterator)#%d (1) {
1516
["storage":"ArrayIterator":private]=>
1617
array(3) {
1718
[1]=>

ext/spl/tests/arrayObject_getFlags_basic2.phpt

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,10 @@ var_dump($ao->getFlags());
77

88
$ao2 = new ArrayObject($ao);
99
var_dump($ao2->getFlags());
10-
var_dump($ao2->getIterator()->getFlags());
10+
@var_dump($ao2->getIterator()->getFlags());
1111

1212
$ai = new ArrayIterator($ao);
13-
var_dump($ai->getFlags());
13+
@var_dump($ai->getFlags());
1414

1515
$ao2 = new ArrayObject($ao, 0);
1616
var_dump($ao2->getFlags());

ext/spl/tests/array_017.phpt

+6-4
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,17 @@ class ArrayIteratorEx extends ArrayIterator
1919
function dump()
2020
{
2121
echo __METHOD__ . "()\n";
22-
var_dump(array('Flags'=>$this->getFlags()
23-
,'OVars'=>get_object_vars($this)
24-
,'$this'=>$this));
22+
var_dump([
23+
'Flags' => @$this->getFlags(),
24+
'OVars' => get_object_vars($this),
25+
'$this' => $this,
26+
]);
2527
}
2628

2729
function setFlags($flags): void
2830
{
2931
echo __METHOD__ . "($flags)\n";
30-
ArrayIterator::setFlags($flags);
32+
@ArrayIterator::setFlags($flags);
3133
}
3234
}
3335

ext/spl/tests/bug46115.phpt

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,6 @@ $x = new reflectionmethod('RecursiveArrayIterator', 'asort');
77
$z = $x->invoke($h);
88
?>
99
DONE
10-
--EXPECT--
10+
--EXPECTF--
11+
Deprecated: Method ArrayIterator::asort() is deprecated in %s on line %d
1112
DONE

ext/spl/tests/bug67539.phpt

+6-1
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,10 @@ function badsort($a, $b) {
1616

1717
$it->uksort('badsort');
1818
?>
19-
--EXPECT--
19+
--EXPECTF--
20+
Deprecated: Method ArrayIterator::uksort() is deprecated in %s on line %d
21+
22+
Deprecated: Method ArrayIterator::serialize() is deprecated in %s on line %d
23+
24+
Deprecated: Method ArrayIterator::unserialize() is deprecated in %s on line %d
2025
Modification of ArrayObject during sorting is prohibited

0 commit comments

Comments
 (0)