]> granicus.if.org Git - php/commitdiff
- Make sure classes are first looked for in the current scope.
authorAndi Gutmans <andi@php.net>
Sat, 27 Jul 2002 15:53:14 +0000 (15:53 +0000)
committerAndi Gutmans <andi@php.net>
Sat, 27 Jul 2002 15:53:14 +0000 (15:53 +0000)
- Make sure that during inheritance the global scope is searched if the
- current one doesn't work.

Zend/zend_compile.c
Zend/zend_execute_API.c

index bf072219c2e5c555a261cca4166ce4c1f5d18b01..cc70bab015d72948bc1d274bf656c65b44ef5c3f 100644 (file)
@@ -2066,7 +2066,8 @@ void zend_do_begin_class_declaration(znode *class_token, znode *class_name, znod
                CG(active_ce_parent_class_name).value.str.val = estrndup(parent_class_name->u.constant.value.str.val, parent_class_name->u.constant.value.str.len);
                CG(active_ce_parent_class_name).value.str.len = parent_class_name->u.constant.value.str.len;
 
-               if (zend_hash_find(CG(active_class_entry)?&CG(active_class_entry)->class_table:CG(class_table), parent_class_name->u.constant.value.str.val, parent_class_name->u.constant.value.str.len+1, (void **) &parent_class_p)==SUCCESS) {
+               if ((CG(active_class_entry) && (zend_hash_find(&CG(active_class_entry)->class_table, parent_class_name->u.constant.value.str.val, parent_class_name->u.constant.value.str.len+1, (void **) &parent_class_p) == SUCCESS)) ||
+                       zend_hash_find(CG(class_table), parent_class_name->u.constant.value.str.val, parent_class_name->u.constant.value.str.len+1, (void **) &parent_class_p) == SUCCESS) {
                        parent_class = *parent_class_p;
                        /* copy functions */
                        zend_hash_copy(&new_class_entry->function_table, &parent_class->function_table, (copy_ctor_func_t) function_add_ref, &tmp_zend_function, sizeof(zend_function));
index efa5cafee9db757932bffe6afd9e71332ae98ea2..426379bc22c3390664babc628f387e1dc6127a32 100644 (file)
@@ -645,6 +645,11 @@ ZEND_API int zend_lookup_class(char *name, int name_length, zend_class_entry ***
        zval *retval_ptr;
        int retval;
 
+       if (EG(scope)) {
+               if (zend_hash_find(&EG(scope)->class_table, name, name_length+1, (void **) ce) == SUCCESS) {
+                       return SUCCESS;
+               }
+       }
        if (zend_hash_find(EG(class_table), name, name_length+1, (void **) ce) == SUCCESS) {
                return SUCCESS;
        }