moriyoshi               Tue Nov 26 16:21:33 2002 EDT

  Modified files:              
    /php4/ext/standard  array.c 
  Log:
  Fixed incorrect error messages of array_walk() in case the callback is
  specified in an array form
  
  
Index: php4/ext/standard/array.c
diff -u php4/ext/standard/array.c:1.202 php4/ext/standard/array.c:1.203
--- php4/ext/standard/array.c:1.202     Sat Nov 23 06:27:56 2002
+++ php4/ext/standard/array.c   Tue Nov 26 16:21:32 2002
@@ -21,7 +21,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: array.c,v 1.202 2002/11/23 11:27:56 moriyoshi Exp $ */
+/* $Id: array.c,v 1.203 2002/11/26 21:21:32 moriyoshi Exp $ */
 
 #include "php.h"
 #include "php_ini.h"
@@ -980,8 +980,37 @@
                
                        zval_ptr_dtor(&retval_ptr);
                } else {
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call 
%s() - function does not exist",
+                       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;
+                                       }
+                               }
+
+                               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");
+                               }
+                       }
                }
 
                zend_hash_move_forward_ex(target_hash, &pos);



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to