]> granicus.if.org Git - php/commitdiff
support objects in array_walk*()
authorAntony Dovgal <tony2001@php.net>
Tue, 19 Sep 2006 09:33:02 +0000 (09:33 +0000)
committerAntony Dovgal <tony2001@php.net>
Tue, 19 Sep 2006 09:33:02 +0000 (09:33 +0000)
add new tests, fix old ones

ext/standard/array.c
ext/standard/tests/array/array_walk.phpt
ext/standard/tests/array/array_walk_objects.phpt [new file with mode: 0644]
ext/standard/tests/array/array_walk_rec_objects.phpt [new file with mode: 0644]
ext/standard/tests/array/array_walk_recursive1.phpt

index aadb5aa241979a1a588fcf750fd5fe4f22e86b53..54623a9e9521562947b5f93371a66e6dc32b1850 100644 (file)
@@ -1115,18 +1115,27 @@ PHP_FUNCTION(array_walk)
                 *userdata = NULL;
        zend_fcall_info orig_array_walk_fci;
        zend_fcall_info_cache orig_array_walk_fci_cache;
+       HashTable *target_hash;
 
        orig_array_walk_fci = BG(array_walk_fci);
        orig_array_walk_fci_cache = BG(array_walk_fci_cache);
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "af|z", &array,
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zf|z", &array,
                                                          &BG(array_walk_fci), &BG(array_walk_fci_cache), &userdata) == FAILURE) {
                BG(array_walk_fci) = orig_array_walk_fci;
                BG(array_walk_fci_cache) = orig_array_walk_fci_cache;
                return;
        }
 
-       php_array_walk(HASH_OF(array), userdata ? &userdata : NULL, 0 TSRMLS_CC);
+       target_hash = HASH_OF(array);
+       if (!target_hash) {
+               BG(array_walk_fci) = orig_array_walk_fci;
+               BG(array_walk_fci_cache) = orig_array_walk_fci_cache;
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "The argument should be an array");
+               RETURN_FALSE;
+       }
+
+       php_array_walk(target_hash, userdata ? &userdata : NULL, 0 TSRMLS_CC);
        BG(array_walk_fci) = orig_array_walk_fci;
        BG(array_walk_fci_cache) = orig_array_walk_fci_cache;
        RETURN_TRUE;
@@ -1141,17 +1150,26 @@ PHP_FUNCTION(array_walk_recursive)
                 *userdata = NULL;
        zend_fcall_info orig_array_walk_fci;
        zend_fcall_info_cache orig_array_walk_fci_cache;
+       HashTable *target_hash;
 
        orig_array_walk_fci = BG(array_walk_fci);
        orig_array_walk_fci_cache = BG(array_walk_fci_cache);
 
-       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "af|z", &array,
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zf|z", &array,
                                                          &BG(array_walk_fci), &BG(array_walk_fci_cache), &userdata) == FAILURE) {
                BG(array_walk_fci) = orig_array_walk_fci;
                BG(array_walk_fci_cache) = orig_array_walk_fci_cache;
                return;
        }
 
+       target_hash = HASH_OF(array);
+       if (!target_hash) {
+               BG(array_walk_fci) = orig_array_walk_fci;
+               BG(array_walk_fci_cache) = orig_array_walk_fci_cache;
+               php_error_docref(NULL TSRMLS_CC, E_WARNING, "The argument should be an array");
+               RETURN_FALSE;
+       }
+
        php_array_walk(HASH_OF(array), userdata ? &userdata : NULL, 1 TSRMLS_CC);
        BG(array_walk_fci) = orig_array_walk_fci;
        BG(array_walk_fci_cache) = orig_array_walk_fci_cache;
index 0cd4a650f307389a82a92820aabd5325777e6575..3c9b1b8f9300776a7c00fe311a67a72bd116896f 100644 (file)
@@ -34,7 +34,7 @@ echo "Done\n";
 Warning: array_walk() expects at least 2 parameters, 0 given in %s on line %d
 NULL
 
-Warning: array_walk() expects parameter 1 to be array, integer given in %s on line %d
+Warning: array_walk() expects parameter 2 to be valid callback, integer given in %s on line %d
 NULL
 
 Warning: array_walk() expects parameter 2 to be valid callback, string given in %s on line %d
@@ -52,7 +52,7 @@ Done
 Warning: array_walk() expects at least 2 parameters, 0 given in %s on line %d
 NULL
 
-Warning: array_walk() expects parameter 1 to be array, integer given in %s on line %d
+Warning: array_walk() expects parameter 2 to be valid callback, integer given in %s on line %d
 NULL
 
 Warning: array_walk() expects parameter 2 to be valid callback, Unicode string given in %s on line %d
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..40d50b1
Binary files /dev/null and b/ext/standard/tests/array/array_walk_objects.phpt differ
diff --git a/ext/standard/tests/array/array_walk_rec_objects.phpt b/ext/standard/tests/array/array_walk_rec_objects.phpt
new file mode 100644 (file)
index 0000000..380d83e
Binary files /dev/null and b/ext/standard/tests/array/array_walk_rec_objects.phpt differ
index 5863a85ebd7a7f65fca96e02b920db7fbb2c673e..ba275346e7350dfdc3aea9b55741bc71714f7207 100644 (file)
@@ -34,7 +34,7 @@ echo "Done\n";
 Warning: array_walk_recursive() expects at least 2 parameters, 0 given in %s on line %d
 NULL
 
-Warning: array_walk_recursive() expects parameter 1 to be array, integer given in %s on line %d
+Warning: array_walk_recursive() expects parameter 2 to be valid callback, integer given in %s on line %d
 NULL
 
 Warning: array_walk_recursive() expects parameter 2 to be valid callback, string given in %s on line %d
@@ -58,7 +58,7 @@ Done
 Warning: array_walk_recursive() expects at least 2 parameters, 0 given in %s on line %d
 NULL
 
-Warning: array_walk_recursive() expects parameter 1 to be array, integer given in %s on line %d
+Warning: array_walk_recursive() expects parameter 2 to be valid callback, integer given in %s on line %d
 NULL
 
 Warning: array_walk_recursive() expects parameter 2 to be valid callback, Unicode string given in %s on line %d