summaryrefslogtreecommitdiff
path: root/ext/standard/tests/array/array_shift_variation8.phpt
diff options
context:
space:
mode:
Diffstat (limited to 'ext/standard/tests/array/array_shift_variation8.phpt')
-rw-r--r--ext/standard/tests/array/array_shift_variation8.phpt50
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