diff options
Diffstat (limited to 'ext/standard/tests/array/array_shift_variation8.phpt')
-rw-r--r-- | ext/standard/tests/array/array_shift_variation8.phpt | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/ext/standard/tests/array/array_shift_variation8.phpt b/ext/standard/tests/array/array_shift_variation8.phpt new file mode 100644 index 0000000..717d98f --- /dev/null +++ b/ext/standard/tests/array/array_shift_variation8.phpt @@ -0,0 +1,50 @@ +--TEST-- +Test array_shift() function : usage variations - maintaining referenced elements +--FILE-- +<?php +/* Prototype : mixed array_shift(array &$stack) + * Description: Pops an element off the beginning of the array + * Source code: ext/standard/array.c + */ + +/* + * From a comment left by Traps on 09-Jul-2007 on the array_shift documentation page: + * For those that may be trying to use array_shift() with an array containing references + * (e.g. working with linked node trees), beware that array_shift() may not work as you expect: + * it will return a *copy* of the first element of the array, + * and not the element itself, so your reference will be lost. + * The solution is to reference the first element before removing it with array_shift(): + */ + +echo "*** Testing array_shift() : usage variations ***\n"; + +// using only array_shift: +echo "\n-- Reference result of array_shift: --\n"; +$a = 1; +$array = array(&$a); +$b =& array_shift($array); +$b = 2; +echo "a = $a, b = $b\n"; + +// solution: referencing the first element first: +echo "\n-- Reference first element before array_shift: --\n"; +$a = 1; +$array = array(&$a); +$b =& $array[0]; +array_shift($array); +$b = 2; +echo "a = $a, b = $b\n"; + +echo "Done"; +?> +--EXPECTF-- +*** Testing array_shift() : usage variations *** + +-- Reference result of array_shift: -- + +Strict Standards: Only variables should be assigned by reference in %s on line %d +a = 1, b = 2 + +-- Reference first element before array_shift: -- +a = 2, b = 2 +Done
\ No newline at end of file |