felipe          Wed Jan 30 10:54:41 2008 UTC

  Modified files:              
    /php-src/ext/reflection     php_reflection.c 
    /php-src/ext/reflection/tests       bug43926.phpt 
  Log:
  Fixed Bug #43926 (isInstance() isn't equivalent to instanceof operator)
  
http://cvs.php.net/viewvc.cgi/php-src/ext/reflection/php_reflection.c?r1=1.290&r2=1.291&diff_format=u
Index: php-src/ext/reflection/php_reflection.c
diff -u php-src/ext/reflection/php_reflection.c:1.290 
php-src/ext/reflection/php_reflection.c:1.291
--- php-src/ext/reflection/php_reflection.c:1.290       Wed Jan 16 14:19:07 2008
+++ php-src/ext/reflection/php_reflection.c     Wed Jan 30 10:54:41 2008
@@ -20,7 +20,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: php_reflection.c,v 1.290 2008/01/16 14:19:07 helly Exp $ */
+/* $Id: php_reflection.c,v 1.291 2008/01/30 10:54:41 felipe Exp $ */
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
@@ -3481,7 +3481,7 @@
                return;
        }
        GET_REFLECTION_OBJECT_PTR(ce);  
-       RETURN_BOOL(ce == Z_OBJCE_P(object));
+       RETURN_BOOL(HAS_CLASS_ENTRY(*object) && 
instanceof_function(Z_OBJCE_P(object), ce));
 }
 /* }}} */
 
@@ -5032,7 +5032,7 @@
        php_info_print_table_start();
        php_info_print_table_header(2, "Reflection", "enabled");
 
-       php_info_print_table_row(2, "Version", "$Id: php_reflection.c,v 1.290 
2008/01/16 14:19:07 helly Exp $");
+       php_info_print_table_row(2, "Version", "$Id: php_reflection.c,v 1.291 
2008/01/30 10:54:41 felipe Exp $");
 
        php_info_print_table_end();
 } /* }}} */
http://cvs.php.net/viewvc.cgi/php-src/ext/reflection/tests/bug43926.phpt?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/reflection/tests/bug43926.phpt
diff -u /dev/null php-src/ext/reflection/tests/bug43926.phpt:1.2
--- /dev/null   Wed Jan 30 10:54:41 2008
+++ php-src/ext/reflection/tests/bug43926.phpt  Wed Jan 30 10:54:41 2008
@@ -0,0 +1,37 @@
+--TEST--
+Bug#43926 - isInstance() isn't equivalent to instanceof operator
+--FILE--
+<?php
+
+class E {
+}
+class D extends E {
+}
+
+class A extends D {
+}
+
+class C extends A {
+}
+
+$ra = new ReflectionClass('A');
+$rc = new ReflectionClass('C');
+$rd = new ReflectionClass('D');
+$re = new ReflectionClass('E');
+
+$ca = $ra->newInstance();
+$cc = $rc->newInstance();
+$cd = $rd->newInstance();
+$ce = $re->newInstance();
+
+print("Is? A ". ($ra->isInstance($ca) ? 'true' : 'false') .", instanceof: ". 
(($ca instanceof A) ? 'true' : 'false') ."\n");
+print("Is? C ". ($ra->isInstance($cc) ? 'true' : 'false') .", instanceof: ". 
(($ca instanceof C) ? 'true' : 'false') ."\n");
+print("Is? D ". ($ra->isInstance($cd) ? 'true' : 'false') .", instanceof: ". 
(($ca instanceof D) ? 'true' : 'false') ."\n");
+print("Is? E ". ($ra->isInstance($ce) ? 'true' : 'false') .", instanceof: ". 
(($ca instanceof E) ? 'true' : 'false') ."\n");
+
+?>
+--EXPECT--
+Is? A true, instanceof: true
+Is? C false, instanceof: false
+Is? D true, instanceof: true
+Is? E true, instanceof: true
\ No newline at end of file

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

Reply via email to