]> granicus.if.org Git - php/commitdiff
support objects in array_walk()
authorAntony Dovgal <tony2001@php.net>
Tue, 19 Sep 2006 09:39:14 +0000 (09:39 +0000)
committerAntony Dovgal <tony2001@php.net>
Tue, 19 Sep 2006 09:39:14 +0000 (09:39 +0000)
ext/standard/array.c
ext/standard/tests/array/array_walk_objects.phpt [new file with mode: 0644]

index 0ab2356e7fb6b526e31a8a44da5fb4eb104e4a73..8954d043ccb17d7b9e567c6e92ab546c212235b2 100644 (file)
@@ -1028,7 +1028,6 @@ static int php_array_walk(HashTable *target_hash, zval **userdata TSRMLS_DC)
    Apply a user function to every member of an array */
 PHP_FUNCTION(array_walk)
 {
-       int     argc;
        zval *array,
                 *userdata = NULL,
                 *tmp,
@@ -1036,7 +1035,7 @@ PHP_FUNCTION(array_walk)
        HashTable *target_hash;
 
        old_walk_func_name = BG(array_walk_func_name);
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "az|z", &array, &tmp, &userdata) == FAILURE) {
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz|z", &array, &tmp, &userdata) == FAILURE) {
                return;
        }
        target_hash = HASH_OF(array);
diff --git a/ext/standard/tests/array/array_walk_objects.phpt b/ext/standard/tests/array/array_walk_objects.phpt
new file mode 100644 (file)
index 0000000..21329f5
--- /dev/null
@@ -0,0 +1,41 @@
+--TEST--
+array_walk() and objects
+--FILE--
+<?php
+
+function walk($key, $value) { 
+       var_dump($value, $key); 
+}
+
+class test {
+       var $var_1 = "test_1";
+       var $var_2 = "test_2";
+}
+
+$stdclass = new stdclass;
+$stdclass->foo = "foo";
+$stdclass->bar = "bar";
+array_walk($stdclass, "walk");
+
+$t = new test;
+array_walk($t, "walk");
+
+$var = array();
+array_walk($var, "walk");
+$var = "";
+array_walk($var, "walk");
+
+echo "Done\n";
+?>
+--EXPECTF--    
+string(3) "foo"
+string(3) "foo"
+string(3) "bar"
+string(3) "bar"
+string(5) "var_1"
+string(6) "test_1"
+string(5) "var_2"
+string(6) "test_2"
+
+Warning: array_walk() [/phpmanual/function.array-walk.html]: The argument should be an array in %s on line %d
+Done