]> granicus.if.org Git - php/commitdiff
Improved the error reporting portion of array_walk() as suggested by Markus
authorMoriyoshi Koizumi <moriyoshi@php.net>
Tue, 26 Nov 2002 22:12:40 +0000 (22:12 +0000)
committerMoriyoshi Koizumi <moriyoshi@php.net>
Tue, 26 Nov 2002 22:12:40 +0000 (22:12 +0000)
ext/standard/array.c

index 0a329cea896b898aa14cd439a9c475bbbdfa7ce7..9c17290e3d9f501dbbb1b655e43c479c72f80edd 100644 (file)
@@ -980,37 +980,15 @@ static int php_array_walk(HashTable *target_hash, zval **userdata TSRMLS_DC)
                
                        zval_ptr_dtor(&retval_ptr);
                } else {
-                       if (Z_TYPE_PP(BG(array_walk_func_name)) == IS_STRING) { 
-                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s() - function does not exist",
-                                         (*BG(array_walk_func_name))->value.str.val);
-                       } else if (Z_TYPE_PP(BG(array_walk_func_name)) == IS_ARRAY) {
-                               char *obj_name = NULL;
-                               zval **obj;
-                               zval **mt_name;
-
-                               if (zend_hash_index_find(Z_ARRVAL_PP(BG(array_walk_func_name)),
-                                               0, (void **)&obj) == SUCCESS
-                                       && zend_hash_index_find(Z_ARRVAL_PP(BG(array_walk_func_name)),
-                                               1, (void **)&mt_name) == SUCCESS
-                                       && Z_TYPE_PP(mt_name) == IS_STRING) {   
-                                       switch (Z_TYPE_PP(obj)) {
-                                               case IS_OBJECT:
-                                                       obj_name = Z_OBJ_PP(obj)->ce->name;
-                                                       break;
-
-                                               case IS_STRING:
-                                                       obj_name = Z_STRVAL_PP(obj);
-                                                       break;
-                                       }
-                               }
+                       char *func_name;
 
-                               if (obj_name != NULL) {
-                                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s::%s() - function does not exist",
-                                               obj_name, Z_STRVAL_PP(mt_name));
-                               } else {
-                                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid function name");
-                               }
+                       if (zend_is_callable(*BG(array_walk_func_name), 0, &func_name)) {
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s()", func_name);
+                       } else {
+                               php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call %s() - function does not exist", func_name);
                        }
+
+                       efree(func_name);
                        break;
                }