com php-src: Deprecate each(): Zend/tests/007.phpt Zend/tests/e ach_001.phpt Zend/tests/each_002.phpt Z end/tests/each_003.phpt Zend/zend_builtin_funct ions.c Zend/zend_execute_API.c Zend/zend_globals .h ext/mysqli/tests/bug42378.phpt ext/mysqli/ tests/mysqli_explain_metadata.phpt ext/mysqli/tests/mys qli_stmt_bind_result_format.phpt ext/pcre/tests/bug 44191.phpt ext/standard/tests/array/each.phpt ext/standard/tests/array/each_basic.phpt ext/standard/ te

[email protected] (Nikita Popov)
Newsgroups php.cvs
Message-ID <[email protected]>
Commit:    06a034016280435feb80eea4d674ca5688ab4c06
Author:    Nikita Popov <[email protected]>         Thu, 2 Feb 2017 23:07:25 +0100
Parents:   6ba720662084306906e125d8f690146d7b86b303
Branches:  master

Link:       http://git.php.net/?p=php-src.git;a=commitdiff;h=06a034016280435feb80eea4d674ca5688ab4c06

Log:
Deprecate each()

Changed paths:
  M  Zend/tests/007.phpt
  M  Zend/tests/each_001.phpt
  M  Zend/tests/each_002.phpt
  M  Zend/tests/each_003.phpt
  M  Zend/zend_builtin_functions.c
  M  Zend/zend_execute_API.c
  M  Zend/zend_globals.h
  M  ext/mysqli/tests/bug42378.phpt
  M  ext/mysqli/tests/mysqli_explain_metadata.phpt
  M  ext/mysqli/tests/mysqli_stmt_bind_result_format.phpt
  M  ext/pcre/tests/bug44191.phpt
  M  ext/standard/tests/array/each.phpt
  M  ext/standard/tests/array/each_basic.phpt
  M  ext/standard/tests/array/each_variation1.phpt
  M  ext/standard/tests/array/each_variation2.phpt
  M  ext/standard/tests/array/each_variation3.phpt
  M  ext/standard/tests/array/each_variation4.phpt
  M  ext/standard/tests/array/each_variation5.phpt
  M  ext/standard/tests/array/each_variation6.phpt
  M  ext/xml/tests/xml001.phpt
  M  ext/xml/tests/xml002.phpt
  M  ext/xml/tests/xml003.phpt
  M  ext/xml/tests/xml004.phpt
  M  ext/xml/tests/xml_closures_001.phpt
  M  run-tests.php
  M  server-tests.php
  M  tests/classes/iterators_006.phpt
  M  tests/lang/031.phpt
  M  tests/lang/each_binary_safety.phpt
diff_06a034016280435feb80eea4d674ca5688ab4c06.txt (text/plain, 14.7 KB)
diff --git a/Zend/tests/007.phpt b/Zend/tests/007.phpt
index 3fff2b8..f8e5b99 100644
--- a/Zend/tests/007.phpt
+++ b/Zend/tests/007.phpt
@@ -25,6 +25,8 @@ echo "Done\n";
 Warning: each() expects exactly 1 parameter, 0 given in %s on line %d
 NULL
 
+Deprecated: The each() function is deprecated. This message will be suppressed on further calls in %s on line %d
+
 Warning: Variable passed to each() is not an array or object in %s on line %d
 NULL
 
diff --git a/Zend/tests/each_001.phpt b/Zend/tests/each_001.phpt
index 06ab52a..f2cae3d 100644
--- a/Zend/tests/each_001.phpt
+++ b/Zend/tests/each_001.phpt
@@ -7,4 +7,6 @@ each($foo);
 
 ?>
 --EXPECTF--
+Deprecated: The each() function is deprecated. This message will be suppressed on further calls in %s on line %d
+
 Warning: Variable passed to each() is not an array or object in %s on line %d
diff --git a/Zend/tests/each_002.phpt b/Zend/tests/each_002.phpt
index 31b749e..5454f5c 100644
--- a/Zend/tests/each_002.phpt
+++ b/Zend/tests/each_002.phpt
@@ -16,6 +16,7 @@ var_dump(each($a));
 
 ?>
 --EXPECTF--
+Deprecated: The each() function is deprecated. This message will be suppressed on further calls in %s on line %d
 bool(false)
 bool(false)
 array(4) {
diff --git a/Zend/tests/each_003.phpt b/Zend/tests/each_003.phpt
index fbd5455..d0038c0 100644
--- a/Zend/tests/each_003.phpt
+++ b/Zend/tests/each_003.phpt
@@ -12,6 +12,7 @@ var_dump(each($a[1]));
 
 ?>
 --EXPECTF--
+Deprecated: The each() function is deprecated. This message will be suppressed on further calls in %s on line %d
 array(4) {
   [1]=>
   array(0) {
diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c
index 397a043..91bf0ee 100644
--- a/Zend/zend_builtin_functions.c
+++ b/Zend/zend_builtin_functions.c
@@ -727,6 +727,11 @@ ZEND_FUNCTION(each)
 		return;
 	}
 
+	if (!EG(each_deprecation_thrown)) {
+		zend_error(E_DEPRECATED, "The each() function is deprecated. This message will be suppressed on further calls");
+		EG(each_deprecation_thrown) = 1;
+	}
+
 	target_hash = HASH_OF(array);
 	if (!target_hash) {
 		zend_error(E_WARNING,"Variable passed to each() is not an array or object");
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index d183e2b..c3c7920 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -185,6 +185,8 @@ void init_executor(void) /* {{{ */
 	EG(ht_iterators) = EG(ht_iterators_slots);
 	memset(EG(ht_iterators), 0, sizeof(EG(ht_iterators_slots)));
 
+	EG(each_deprecation_thrown) = 0;
+
 	EG(active) = 1;
 }
 /* }}} */
diff --git a/Zend/zend_globals.h b/Zend/zend_globals.h
index 9c56ca9..083875f 100644
--- a/Zend/zend_globals.h
+++ b/Zend/zend_globals.h
@@ -230,6 +230,8 @@ struct _zend_executor_globals {
 	zend_function trampoline;
 	zend_op       call_trampoline_op;
 
+	zend_bool each_deprecation_thrown;
+
 	void *reserved[ZEND_MAX_RESERVED_RESOURCES];
 };
 
diff --git a/ext/mysqli/tests/bug42378.phpt b/ext/mysqli/tests/bug42378.phpt
index b3fd7ca..f3bbe34 100644
--- a/ext/mysqli/tests/bug42378.phpt
+++ b/ext/mysqli/tests/bug42378.phpt
@@ -128,19 +128,18 @@ memory_limit=83886080
 				}
 			}
 
-			if (!empty($expected))
-				reset($expected);
-			while ((list($k, $v) = each($expected)) && mysqli_stmt_fetch($stmt)) {
-				if (!empty($expected)) {
-					if ($result !== $v) {
-						printf("[%03d] Row %d - expecting %s/%s got %s/%s [%s] with %s - %s.\n",
-							$offset + 8,
-							$k,
-							gettype($v), $v,
-							gettype($result), $result,
-							$order_by_col,
-							$format, $sql);
-					}
+			foreach ($expected as $k => $v) {
+				if (!mysqli_stmt_fetch($stmt)) {
+					break;
+				}
+				if ($result !== $v) {
+					printf("[%03d] Row %d - expecting %s/%s got %s/%s [%s] with %s - %s.\n",
+						$offset + 8,
+						$k,
+						gettype($v), $v,
+						gettype($result), $result,
+						$order_by_col,
+						$format, $sql);
 				}
 			}
 
diff --git a/ext/mysqli/tests/mysqli_explain_metadata.phpt b/ext/mysqli/tests/mysqli_explain_metadata.phpt
index fc1f9db..8f4a7cc 100644
--- a/ext/mysqli/tests/mysqli_explain_metadata.phpt
+++ b/ext/mysqli/tests/mysqli_explain_metadata.phpt
@@ -130,7 +130,8 @@ if (!$IS_MYSQLND)
 			}
 			reset($fields);
 			foreach ($fields_stmt as $fields_stmt_val) {
-				list(,$fields_val) = each($fields);
+				$fields_val = current($fields);
+				next($fields);
 				unset($fields_stmt_val->max_length);
 				unset($fields_val->max_length);
 				if ($fields_stmt_val != $fields_val) {
diff --git a/ext/mysqli/tests/mysqli_stmt_bind_result_format.phpt b/ext/mysqli/tests/mysqli_stmt_bind_result_format.phpt
index dee5a7e..68ec601 100644
--- a/ext/mysqli/tests/mysqli_stmt_bind_result_format.phpt
+++ b/ext/mysqli/tests/mysqli_stmt_bind_result_format.phpt
@@ -117,8 +117,10 @@ memory_limit=83886080
 				return false;
 			}
 
-			reset($expected);
-			while ((list($k, $v) = each($expected)) && mysqli_stmt_fetch($stmt)) {
+			foreach ($expected as $k => $v) {
+				if (!mysqli_stmt_fetch($stmt)) {
+					break;
+				}
 				if ($result !== $v) {
 					printf("[%03d] Row %d - expecting %s/%s got %s/%s [%s] with %s - %s.\n",
 						$offset + 8,
@@ -269,9 +271,10 @@ memory_limit=83886080
 				break;
 			}
 
-			reset($values);
-			while (mysqli_stmt_fetch($stmt)) {
-				list($exp_trend, $exp_targetport) = each($values);
+			foreach ($values as $exp_trend => $exp_targetport) {
+				if (!mysqli_stmt_fetch($stmt)) {
+					break;
+				}
 				if ($targetport != $exp_targetport) {
 					printf("[306] Values fetched from MySQL seem to be wrong, check manually\n");
 					printf("%s/%s - %s/%s - '%s'\n", $trend, $exp_trend, $targetport, $exp_targetport, $format);
@@ -308,9 +311,10 @@ memory_limit=83886080
 				break;
 			}
 
-			reset($values);
-			while ($stmt->fetch()) {
-				list($exp_trend, $exp_targetport) = each($values);
+			foreach ($values as $exp_trend => $exp_targetport) {
+				if (!$stmt->fetch()) {
+					break;
+				}
 				if ($targetport != $exp_targetport) {
 					printf("[312] Values fetched from MySQL seem to be wrong, check manually\n");
 					printf("%s/%s - %s/%s - '%s'\n", $trend, $exp_trend, $targetport, $exp_targetport, $format);
@@ -334,4 +338,4 @@ memory_limit=83886080
 	require_once("clean_table.inc");
 ?>
 --EXPECTF--
-done!
\ No newline at end of file
+done!
diff --git a/ext/pcre/tests/bug44191.phpt b/ext/pcre/tests/bug44191.phpt
index 52b4490..73fc29c 100644
--- a/ext/pcre/tests/bug44191.phpt
+++ b/ext/pcre/tests/bug44191.phpt
@@ -7,8 +7,8 @@ $array = range(1, 10);
 
 preg_grep('/asdf/', $array);
 
-while (list($x) = each($array)) {
-	print $x;
+foreach ($array as $k => $v) {
+	print $k;
 }
 
 ?>
diff --git a/ext/standard/tests/array/each.phpt b/ext/standard/tests/array/each.phpt
index 974808c..f1b6f76 100644
Binary files a/ext/standard/tests/array/each.phpt and b/ext/standard/tests/array/each.phpt differ
diff --git a/ext/standard/tests/array/each_basic.phpt b/ext/standard/tests/array/each_basic.phpt
index 350b40f..b12b4c1 100644
--- a/ext/standard/tests/array/each_basic.phpt
+++ b/ext/standard/tests/array/each_basic.phpt
@@ -46,6 +46,8 @@ array(4) {
 }
 
 -- Initial position: --
+
+Deprecated: The each() function is deprecated. This message will be suppressed on further calls in %s on line %d
 array(4) {
   [1]=>
   int(1)
@@ -71,4 +73,4 @@ array(4) {
 
 -- Passed the end of array: --
 bool(false)
-Done
\ No newline at end of file
+Done
diff --git a/ext/standard/tests/array/each_variation1.phpt b/ext/standard/tests/array/each_variation1.phpt
index 0afef31..becdfc4 100644
--- a/ext/standard/tests/array/each_variation1.phpt
+++ b/ext/standard/tests/array/each_variation1.phpt
@@ -101,6 +101,8 @@ echo "Done";
 
 -- Iteration 1 --
 
+Deprecated: The each() function is deprecated. This message will be suppressed on further calls in %s on line %d
+
 Warning: Variable passed to each() is not an array or object in %s on line %d
 NULL
 
diff --git a/ext/standard/tests/array/each_variation2.phpt b/ext/standard/tests/array/each_variation2.phpt
index 3f7211c..73b1ba2 100644
--- a/ext/standard/tests/array/each_variation2.phpt
+++ b/ext/standard/tests/array/each_variation2.phpt
@@ -122,6 +122,8 @@ echo "Done";
 *** Testing each() : usage variations ***
 
 -- Iteration 1: int data --
+
+Deprecated: The each() function is deprecated. This message will be suppressed on further calls in %s on line %d
 array(4) {
   [1]=>
   int(0)
@@ -245,4 +247,4 @@ array(4) {
   ["key"]=>
   int(0)
 }
-Done
\ No newline at end of file
+Done
diff --git a/ext/standard/tests/array/each_variation3.phpt b/ext/standard/tests/array/each_variation3.phpt
index b31ddc6..3756156 100644
--- a/ext/standard/tests/array/each_variation3.phpt
+++ b/ext/standard/tests/array/each_variation3.phpt
@@ -108,6 +108,8 @@ echo "Done";
 *** Testing each() : usage variations ***
 
 -- Iteration 1: int data --
+
+Deprecated: The each() function is deprecated. This message will be suppressed on further calls in %s on line %d
 array(4) {
   [1]=>
   string(4) "zero"
@@ -250,4 +252,4 @@ array(4) {
   ["key"]=>
   string(0) ""
 }
-Done
\ No newline at end of file
+Done
diff --git a/ext/standard/tests/array/each_variation4.phpt b/ext/standard/tests/array/each_variation4.phpt
index 535ae29..14b5536 100644
--- a/ext/standard/tests/array/each_variation4.phpt
+++ b/ext/standard/tests/array/each_variation4.phpt
@@ -35,6 +35,8 @@ echo "Done";
 
 -- Array made up of referenced variables: --
 -- Call each until at the end of the array: --
+
+Deprecated: The each() function is deprecated. This message will be suppressed on further calls in %s on line %d
 array(4) {
   [1]=>
   string(3) "foo"
diff --git a/ext/standard/tests/array/each_variation5.phpt b/ext/standard/tests/array/each_variation5.phpt
index 941ad5e..b6c3953 100644
--- a/ext/standard/tests/array/each_variation5.phpt
+++ b/ext/standard/tests/array/each_variation5.phpt
@@ -37,6 +37,8 @@ echo "Done";
 *** Testing each() : usage variations ***
 
 -- Pass each() a two-dimensional array --
+
+Deprecated: The each() function is deprecated. This message will be suppressed on further calls in %s on line %d
 array(4) {
   [1]=>
   string(4) "zero"
@@ -93,4 +95,4 @@ array(4) {
   ["key"]=>
   int(0)
 }
-Done
\ No newline at end of file
+Done
diff --git a/ext/standard/tests/array/each_variation6.phpt b/ext/standard/tests/array/each_variation6.phpt
index 445d63f..ba0f265 100644
--- a/ext/standard/tests/array/each_variation6.phpt
+++ b/ext/standard/tests/array/each_variation6.phpt
@@ -35,6 +35,8 @@ echo "Done";
 0 => zero
 
 -- Call to each(): --
+
+Deprecated: The each() function is deprecated. This message will be suppressed on further calls in %s on line %d
 array(4) {
   [1]=>
   string(4) "zero"
@@ -48,4 +50,4 @@ array(4) {
 
 -- New position: --
 1 => one
-Done
\ No newline at end of file
+Done
diff --git a/ext/xml/tests/xml001.phpt b/ext/xml/tests/xml001.phpt
index 9c03b55..987991e 100644
--- a/ext/xml/tests/xml001.phpt
+++ b/ext/xml/tests/xml001.phpt
@@ -35,7 +35,7 @@ function startElement($parser, $name, $attribs)
 {
 	print '{'.$name;
 	if (sizeof($attribs)) {
-		while (list($k, $v) = each($attribs)) {
+        foreach ($attribs as $k => $v) {
 			print " $k=\"$v\"";
 		}
 	}
diff --git a/ext/xml/tests/xml002.phpt b/ext/xml/tests/xml002.phpt
index ce547e8..f563199 100644
--- a/ext/xml/tests/xml002.phpt
+++ b/ext/xml/tests/xml002.phpt
@@ -15,7 +15,7 @@ class myclass
 	{
 		print '{'.$name;
 		if (sizeof($attribs)) {
-			while (list($k, $v) = each($attribs)) {
+            foreach ($attribs as $k => $v) {
 				print " $k=\"$v\"";
 			}
 		}
diff --git a/ext/xml/tests/xml003.phpt b/ext/xml/tests/xml003.phpt
index 6b0c3f5..9734311 100644
--- a/ext/xml/tests/xml003.phpt
+++ b/ext/xml/tests/xml003.phpt
@@ -15,7 +15,7 @@ class myclass
 	{
 		print '{'.$name;
 		if (sizeof($attribs)) {
-			while (list($k, $v) = each($attribs)) {
+            foreach ($attribs as $k => $v) {
 				print " $k=\"$v\"";
 			}
 		}
diff --git a/ext/xml/tests/xml004.phpt b/ext/xml/tests/xml004.phpt
index 245a93f..a9e68e1 100644
--- a/ext/xml/tests/xml004.phpt
+++ b/ext/xml/tests/xml004.phpt
@@ -27,7 +27,7 @@ function start_element($xp, $elem, $attribs)
 {
 	print "<$elem";
 	if (sizeof($attribs)) {
-		while (list($k, $v) = each($attribs)) {
+        foreach ($attribs as $k => $v) {
 			print " $k=\"$v\"";
 		}
 	}
diff --git a/ext/xml/tests/xml_closures_001.phpt b/ext/xml/tests/xml_closures_001.phpt
index 37df254..defffbb 100644
--- a/ext/xml/tests/xml_closures_001.phpt
+++ b/ext/xml/tests/xml_closures_001.phpt
@@ -10,7 +10,7 @@ $start_element = function ($xp, $elem, $attribs)
 {
 	print "<$elem";
 	if (sizeof($attribs)) {
-		while (list($k, $v) = each($attribs)) {
+        foreach ($attribs as $k => $v) {
 			print " $k=\"$v\"";
 		}
 	}
diff --git a/run-tests.php b/run-tests.php
index 32e68ca..1d57353 100755
--- a/run-tests.php
+++ b/run-tests.php
@@ -2415,7 +2415,7 @@ function compute_summary()
 	$sum_results['SKIPPED'] += $ignored_by_ext;
 	$percent_results = array();
 
-	while (list($v, $n) = each($sum_results)) {
+	foreach ($sum_results as $v => $n) {
 		$percent_results[$v] = (100.0 * $n) / $n_total;
 	}
 }
diff --git a/server-tests.php b/server-tests.php
index 9178424..6e1620f 100755
--- a/server-tests.php
+++ b/server-tests.php
@@ -901,7 +901,7 @@ class testHarness {
 		}
 		$sum_results['SKIPPED'] += $this->ignored_by_ext;
 		$percent_results = array();
-		while (list($v,$n) = each($sum_results)) {
+		foreach ($sum_results as $v => $n) {
 			$percent_results[$v] = (100.0 * $n) / $n_total;
 		}
 		
diff --git a/tests/classes/iterators_006.phpt b/tests/classes/iterators_006.phpt
index 8017a8a..564f15d 100644
--- a/tests/classes/iterators_006.phpt
+++ b/tests/classes/iterators_006.phpt
@@ -29,10 +29,9 @@ class ai implements Iterator {
 	}
 
 	function next() {
-		list($this->key, $this->current) = each($this->array);
-//		list($key, $current) = each($this->array);
-//		$this->key = $key;
-//		$this->current = $current;
+        $this->key = key($this->array);
+        $this->current = current($this->array);
+        next($this->array);
 	}
 }
 
diff --git a/tests/lang/031.phpt b/tests/lang/031.phpt
index b2d1e63..134df03 100644
--- a/tests/lang/031.phpt
+++ b/tests/lang/031.phpt
@@ -49,8 +49,10 @@ while(list(,$o) = each($arrayOuter)){
 reset($arrayOuter);
 reset($arrayInner);
 ?>
---EXPECT--
+--EXPECTF--
 Correct - with inner loop reset.
+
+Deprecated: The each() function is deprecated. This message will be suppressed on further calls in %s on line %d
 inloop 0 for key1
 inloop 1 for key1
 inloop 0 for key2
diff --git a/tests/lang/each_binary_safety.phpt b/tests/lang/each_binary_safety.phpt
index bb13534..37b18b3 100644
--- a/tests/lang/each_binary_safety.phpt
+++ b/tests/lang/each_binary_safety.phpt
@@ -9,5 +9,7 @@ while (list($key, $val) = each($arr)) {
 	echo urlencode($key), ' => ', urlencode($val), "\n";
 }
 ?>
---EXPECT--
+--EXPECTF--
+
+Deprecated: The each() function is deprecated. This message will be suppressed on further calls in %s on line %d
 7: foo%00bar => foo%00bar
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.