]> granicus.if.org Git - php/commitdiff
Doh! I'm an idiot.
authorAndrei Zmievski <andrei@php.net>
Wed, 15 Dec 1999 22:37:05 +0000 (22:37 +0000)
committerAndrei Zmievski <andrei@php.net>
Wed, 15 Dec 1999 22:37:05 +0000 (22:37 +0000)
Zend/zend_builtin_functions.c

index f7c9b4f9ee7d826a1c72485ffc6654651496b72c..45828bff7089af6f8f279f5400d8324b53f008aa 100644 (file)
@@ -396,7 +396,7 @@ ZEND_FUNCTION(get_parent_class)
 /* }}} */
 
 /* {{{ proto bool is_subclass_of(object object, string class_name)
-   Returns true if the object is part of hierarchy derived from passed class */
+   Returns true if the object has this class as one of its parents */
 ZEND_FUNCTION(is_subclass_of)
 {
        zval **obj, **class_name;
@@ -412,23 +412,16 @@ ZEND_FUNCTION(is_subclass_of)
                RETURN_FALSE;
        }
 
-       parent_ce = (*obj)->value.obj.ce->parent;
-       if (!parent_ce) {
-               RETURN_FALSE;
-       }
-
        convert_to_string_ex(class_name);
        lcname = estrndup((*class_name)->value.str.val, (*class_name)->value.str.len);
        zend_str_tolower(lcname, (*class_name)->value.str.len);
 
-       do {
+       for (parent_ce = (*obj)->value.obj.ce->parent; parent_ce != NULL; parent_ce = parent_ce->parent) {
                if (!strcmp(parent_ce->name, lcname)) {
                        efree(lcname);
                        RETURN_TRUE;
                }
-       } while (parent_ce->parent
-             && zend_hash_find(CG(class_table), parent_ce->parent->name,
-                               parent_ce->parent->name_length+1, (void**)&parent_ce)==SUCCESS);
+       }
        efree(lcname);
        RETURN_FALSE;
 }