]> granicus.if.org Git - php/commitdiff
clean up is_a test, so that it covers more use cases - negative and positive testing
authorAlan Knowles <alan_k@php.net>
Sat, 24 Sep 2011 01:29:48 +0000 (01:29 +0000)
committerAlan Knowles <alan_k@php.net>
Sat, 24 Sep 2011 01:29:48 +0000 (01:29 +0000)
tests/classes/is_a.phpt

index e6f250648dde3724410c84c0e571f869b1aa2ecc..0069b9357098c5515f12a3fd4e43c0287a06e81f 100644 (file)
@@ -19,9 +19,11 @@ class base {
                echo "\n>>> With Defined class\n";
                echo str_pad('is_a( OBJECT:'.get_class($this).', '.$sub.') = ', 60) . (is_a($this, $sub) ? 'yes' : 'no')."\n";
                echo str_pad('is_a( STRING:'.get_class($this).', '.$sub.') = ', 60). (is_a(get_class($this), $sub) ? 'yes' : 'no')."\n";
+               echo str_pad('is_a( STRING:'.get_class($this).', '.$sub.', true) = ', 60). (is_a(get_class($this), $sub, true) ? 'yes' : 'no')."\n";            
                echo str_pad('is_subclass_of( OBJECT:'.get_class($this).', '.$sub.') = ', 60).  (is_subclass_of($this, $sub) ? 'yes' : 'no')."\n";
                echo str_pad('is_subclass_of( STRING:'.get_class($this).', '.$sub.') = ', 60). (is_subclass_of(get_class($this), $sub) ? 'yes' : 'no')."\n";
-               
+               echo str_pad('is_subclass_of( STRING:'.get_class($this).', '.$sub.',false) = ', 60). (is_subclass_of(get_class($this), $sub , false) ? 'yes' : 'no')."\n";
+                
                // with autoload options..
                echo ">>> With Undefined\n";
                echo  str_pad('is_a( STRING:undefB, '.$sub.',true) = ', 60). (is_a('undefB', $sub, true) ? 'yes' : 'no')."\n";
@@ -31,12 +33,8 @@ class base {
        }
        function test() {
                echo $this->_is_a('base');
-               echo $this->_is_a('derived_a');
-               echo $this->_is_a('derived_b');
-               echo $this->_is_a('derived_c');
-               echo $this->_is_a('derived_d');
-               echo $this->_is_a('if_a');
-               echo $this->_is_a('if_b');
+               echo $this->_is_a('derived_a');  
+               echo $this->_is_a('if_a'); 
                echo $this->_is_a('undefA');
                echo "\n";
        }
@@ -60,6 +58,10 @@ class derived_d extends derived_c {
 
 $t = new base();
 $t->test();
+
+$t = new derived_a();
+$t->test();
+
 eval('
   function __autoload($name)
   {
@@ -78,13 +80,7 @@ $t->test();
 
 $t = new derived_b();
 $t->test();
-
-$t = new derived_c();
-$t->test();
-
-$t = new derived_d();
-$t->test();
-
 
 
 
@@ -94,8 +90,10 @@ $t->test();
 >>> With Defined class
 is_a( OBJECT:base, base) =                                  yes
 is_a( STRING:base, base) =                                  no
+is_a( STRING:base, base, true) =                            yes
 is_subclass_of( OBJECT:base, base) =                        no
 is_subclass_of( STRING:base, base) =                        no
+is_subclass_of( STRING:base, base,false) =                  no
 >>> With Undefined
 is_a( STRING:undefB, base,true) =                           no
 is_a( STRING:undefB, base) =                                no
@@ -105,8 +103,10 @@ is_subclass_of( STRING:undefB, base) =                      no
 >>> With Defined class
 is_a( OBJECT:base, derived_a) =                             no
 is_a( STRING:base, derived_a) =                             no
+is_a( STRING:base, derived_a, true) =                       no
 is_subclass_of( OBJECT:base, derived_a) =                   no
 is_subclass_of( STRING:base, derived_a) =                   no
+is_subclass_of( STRING:base, derived_a,false) =             no
 >>> With Undefined
 is_a( STRING:undefB, derived_a,true) =                      no
 is_a( STRING:undefB, derived_a) =                           no
@@ -114,43 +114,65 @@ is_subclass_of( STRING:undefB, derived_a,false) =           no
 is_subclass_of( STRING:undefB, derived_a) =                 no
 
 >>> With Defined class
-is_a( OBJECT:base, derived_b) =                             no
-is_a( STRING:base, derived_b) =                             no
-is_subclass_of( OBJECT:base, derived_b) =                   no
-is_subclass_of( STRING:base, derived_b) =                   no
+is_a( OBJECT:base, if_a) =                                  no
+is_a( STRING:base, if_a) =                                  no
+is_a( STRING:base, if_a, true) =                            no
+is_subclass_of( OBJECT:base, if_a) =                        no
+is_subclass_of( STRING:base, if_a) =                        no
+is_subclass_of( STRING:base, if_a,false) =                  no
+>>> With Undefined
+is_a( STRING:undefB, if_a,true) =                           no
+is_a( STRING:undefB, if_a) =                                no
+is_subclass_of( STRING:undefB, if_a,false) =                no
+is_subclass_of( STRING:undefB, if_a) =                      no
+
+>>> With Defined class
+is_a( OBJECT:base, undefA) =                                no
+is_a( STRING:base, undefA) =                                no
+is_a( STRING:base, undefA, true) =                          no
+is_subclass_of( OBJECT:base, undefA) =                      no
+is_subclass_of( STRING:base, undefA) =                      no
+is_subclass_of( STRING:base, undefA,false) =                no
 >>> With Undefined
-is_a( STRING:undefB, derived_b,true) =                      no
-is_a( STRING:undefB, derived_b) =                           no
-is_subclass_of( STRING:undefB, derived_b,false) =           no
-is_subclass_of( STRING:undefB, derived_b) =                 no
+is_a( STRING:undefB, undefA,true) =                         no
+is_a( STRING:undefB, undefA) =                              no
+is_subclass_of( STRING:undefB, undefA,false) =              no
+is_subclass_of( STRING:undefB, undefA) =                    no
+
 
 >>> With Defined class
-is_a( OBJECT:base, derived_c) =                             no
-is_a( STRING:base, derived_c) =                             no
-is_subclass_of( OBJECT:base, derived_c) =                   no
-is_subclass_of( STRING:base, derived_c) =                   no
+is_a( OBJECT:derived_a, base) =                             yes
+is_a( STRING:derived_a, base) =                             no
+is_a( STRING:derived_a, base, true) =                       yes
+is_subclass_of( OBJECT:derived_a, base) =                   yes
+is_subclass_of( STRING:derived_a, base) =                   yes
+is_subclass_of( STRING:derived_a, base,false) =             no
 >>> With Undefined
-is_a( STRING:undefB, derived_c,true) =                      no
-is_a( STRING:undefB, derived_c) =                           no
-is_subclass_of( STRING:undefB, derived_c,false) =           no
-is_subclass_of( STRING:undefB, derived_c) =                 no
+is_a( STRING:undefB, base,true) =                           no
+is_a( STRING:undefB, base) =                                no
+is_subclass_of( STRING:undefB, base,false) =                no
+is_subclass_of( STRING:undefB, base) =                      no
 
 >>> With Defined class
-is_a( OBJECT:base, derived_d) =                             no
-is_a( STRING:base, derived_d) =                             no
-is_subclass_of( OBJECT:base, derived_d) =                   no
-is_subclass_of( STRING:base, derived_d) =                   no
+is_a( OBJECT:derived_a, derived_a) =                        yes
+is_a( STRING:derived_a, derived_a) =                        no
+is_a( STRING:derived_a, derived_a, true) =                  yes
+is_subclass_of( OBJECT:derived_a, derived_a) =              no
+is_subclass_of( STRING:derived_a, derived_a) =              no
+is_subclass_of( STRING:derived_a, derived_a,false) =        no
 >>> With Undefined
-is_a( STRING:undefB, derived_d,true) =                      no
-is_a( STRING:undefB, derived_d) =                           no
-is_subclass_of( STRING:undefB, derived_d,false) =           no
-is_subclass_of( STRING:undefB, derived_d) =                 no
+is_a( STRING:undefB, derived_a,true) =                      no
+is_a( STRING:undefB, derived_a) =                           no
+is_subclass_of( STRING:undefB, derived_a,false) =           no
+is_subclass_of( STRING:undefB, derived_a) =                 no
 
 >>> With Defined class
-is_a( OBJECT:base, if_a) =                                  no
-is_a( STRING:base, if_a) =                                  no
-is_subclass_of( OBJECT:base, if_a) =                        no
-is_subclass_of( STRING:base, if_a) =                        no
+is_a( OBJECT:derived_a, if_a) =                             yes
+is_a( STRING:derived_a, if_a) =                             no
+is_a( STRING:derived_a, if_a, true) =                       yes
+is_subclass_of( OBJECT:derived_a, if_a) =                   yes
+is_subclass_of( STRING:derived_a, if_a) =                   yes
+is_subclass_of( STRING:derived_a, if_a,false) =             no
 >>> With Undefined
 is_a( STRING:undefB, if_a,true) =                           no
 is_a( STRING:undefB, if_a) =                                no
@@ -158,21 +180,12 @@ is_subclass_of( STRING:undefB, if_a,false) =                no
 is_subclass_of( STRING:undefB, if_a) =                      no
 
 >>> With Defined class
-is_a( OBJECT:base, if_b) =                                  no
-is_a( STRING:base, if_b) =                                  no
-is_subclass_of( OBJECT:base, if_b) =                        no
-is_subclass_of( STRING:base, if_b) =                        no
->>> With Undefined
-is_a( STRING:undefB, if_b,true) =                           no
-is_a( STRING:undefB, if_b) =                                no
-is_subclass_of( STRING:undefB, if_b,false) =                no
-is_subclass_of( STRING:undefB, if_b) =                      no
-
->>> With Defined class
-is_a( OBJECT:base, undefA) =                                no
-is_a( STRING:base, undefA) =                                no
-is_subclass_of( OBJECT:base, undefA) =                      no
-is_subclass_of( STRING:base, undefA) =                      no
+is_a( OBJECT:derived_a, undefA) =                           no
+is_a( STRING:derived_a, undefA) =                           no
+is_a( STRING:derived_a, undefA, true) =                     no
+is_subclass_of( OBJECT:derived_a, undefA) =                 no
+is_subclass_of( STRING:derived_a, undefA) =                 no
+is_subclass_of( STRING:derived_a, undefA,false) =           no
 >>> With Undefined
 is_a( STRING:undefB, undefA,true) =                         no
 is_a( STRING:undefB, undefA) =                              no
@@ -185,8 +198,10 @@ NOW WITH AUTOLOAD
 >>> With Defined class
 is_a( OBJECT:base, base) =                                  yes
 is_a( STRING:base, base) =                                  no
+is_a( STRING:base, base, true) =                            yes
 is_subclass_of( OBJECT:base, base) =                        no
 is_subclass_of( STRING:base, base) =                        no
+is_subclass_of( STRING:base, base,false) =                  no
 >>> With Undefined
 >>>> In __autoload: string(6) "undefB"
 is_a( STRING:undefB, base,true) =                           no
@@ -198,8 +213,10 @@ is_subclass_of( STRING:undefB, base) =                      no
 >>> With Defined class
 is_a( OBJECT:base, derived_a) =                             no
 is_a( STRING:base, derived_a) =                             no
+is_a( STRING:base, derived_a, true) =                       no
 is_subclass_of( OBJECT:base, derived_a) =                   no
 is_subclass_of( STRING:base, derived_a) =                   no
+is_subclass_of( STRING:base, derived_a,false) =             no
 >>> With Undefined
 >>>> In __autoload: string(6) "undefB"
 is_a( STRING:undefB, derived_a,true) =                      no
@@ -208,50 +225,13 @@ is_subclass_of( STRING:undefB, derived_a,false) =           no
 >>>> In __autoload: string(6) "undefB"
 is_subclass_of( STRING:undefB, derived_a) =                 no
 
->>> With Defined class
-is_a( OBJECT:base, derived_b) =                             no
-is_a( STRING:base, derived_b) =                             no
-is_subclass_of( OBJECT:base, derived_b) =                   no
-is_subclass_of( STRING:base, derived_b) =                   no
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, derived_b,true) =                      no
-is_a( STRING:undefB, derived_b) =                           no
-is_subclass_of( STRING:undefB, derived_b,false) =           no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, derived_b) =                 no
-
->>> With Defined class
-is_a( OBJECT:base, derived_c) =                             no
-is_a( STRING:base, derived_c) =                             no
-is_subclass_of( OBJECT:base, derived_c) =                   no
-is_subclass_of( STRING:base, derived_c) =                   no
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, derived_c,true) =                      no
-is_a( STRING:undefB, derived_c) =                           no
-is_subclass_of( STRING:undefB, derived_c,false) =           no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, derived_c) =                 no
-
->>> With Defined class
-is_a( OBJECT:base, derived_d) =                             no
-is_a( STRING:base, derived_d) =                             no
-is_subclass_of( OBJECT:base, derived_d) =                   no
-is_subclass_of( STRING:base, derived_d) =                   no
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, derived_d,true) =                      no
-is_a( STRING:undefB, derived_d) =                           no
-is_subclass_of( STRING:undefB, derived_d,false) =           no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, derived_d) =                 no
-
 >>> With Defined class
 is_a( OBJECT:base, if_a) =                                  no
 is_a( STRING:base, if_a) =                                  no
+is_a( STRING:base, if_a, true) =                            no
 is_subclass_of( OBJECT:base, if_a) =                        no
 is_subclass_of( STRING:base, if_a) =                        no
+is_subclass_of( STRING:base, if_a,false) =                  no
 >>> With Undefined
 >>>> In __autoload: string(6) "undefB"
 is_a( STRING:undefB, if_a,true) =                           no
@@ -260,24 +240,13 @@ is_subclass_of( STRING:undefB, if_a,false) =                no
 >>>> In __autoload: string(6) "undefB"
 is_subclass_of( STRING:undefB, if_a) =                      no
 
->>> With Defined class
-is_a( OBJECT:base, if_b) =                                  no
-is_a( STRING:base, if_b) =                                  no
-is_subclass_of( OBJECT:base, if_b) =                        no
-is_subclass_of( STRING:base, if_b) =                        no
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, if_b,true) =                           no
-is_a( STRING:undefB, if_b) =                                no
-is_subclass_of( STRING:undefB, if_b,false) =                no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, if_b) =                      no
-
 >>> With Defined class
 is_a( OBJECT:base, undefA) =                                no
 is_a( STRING:base, undefA) =                                no
+is_a( STRING:base, undefA, true) =                          no
 is_subclass_of( OBJECT:base, undefA) =                      no
 is_subclass_of( STRING:base, undefA) =                      no
+is_subclass_of( STRING:base, undefA,false) =                no
 >>> With Undefined
 >>>> In __autoload: string(6) "undefB"
 is_a( STRING:undefB, undefA,true) =                         no
@@ -290,8 +259,10 @@ is_subclass_of( STRING:undefB, undefA) =                    no
 >>> With Defined class
 is_a( OBJECT:derived_a, base) =                             yes
 is_a( STRING:derived_a, base) =                             no
+is_a( STRING:derived_a, base, true) =                       yes
 is_subclass_of( OBJECT:derived_a, base) =                   yes
 is_subclass_of( STRING:derived_a, base) =                   yes
+is_subclass_of( STRING:derived_a, base,false) =             no
 >>> With Undefined
 >>>> In __autoload: string(6) "undefB"
 is_a( STRING:undefB, base,true) =                           no
@@ -303,8 +274,10 @@ is_subclass_of( STRING:undefB, base) =                      no
 >>> With Defined class
 is_a( OBJECT:derived_a, derived_a) =                        yes
 is_a( STRING:derived_a, derived_a) =                        no
+is_a( STRING:derived_a, derived_a, true) =                  yes
 is_subclass_of( OBJECT:derived_a, derived_a) =              no
 is_subclass_of( STRING:derived_a, derived_a) =              no
+is_subclass_of( STRING:derived_a, derived_a,false) =        no
 >>> With Undefined
 >>>> In __autoload: string(6) "undefB"
 is_a( STRING:undefB, derived_a,true) =                      no
@@ -313,50 +286,13 @@ is_subclass_of( STRING:undefB, derived_a,false) =           no
 >>>> In __autoload: string(6) "undefB"
 is_subclass_of( STRING:undefB, derived_a) =                 no
 
->>> With Defined class
-is_a( OBJECT:derived_a, derived_b) =                        no
-is_a( STRING:derived_a, derived_b) =                        no
-is_subclass_of( OBJECT:derived_a, derived_b) =              no
-is_subclass_of( STRING:derived_a, derived_b) =              no
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, derived_b,true) =                      no
-is_a( STRING:undefB, derived_b) =                           no
-is_subclass_of( STRING:undefB, derived_b,false) =           no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, derived_b) =                 no
-
->>> With Defined class
-is_a( OBJECT:derived_a, derived_c) =                        no
-is_a( STRING:derived_a, derived_c) =                        no
-is_subclass_of( OBJECT:derived_a, derived_c) =              no
-is_subclass_of( STRING:derived_a, derived_c) =              no
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, derived_c,true) =                      no
-is_a( STRING:undefB, derived_c) =                           no
-is_subclass_of( STRING:undefB, derived_c,false) =           no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, derived_c) =                 no
-
->>> With Defined class
-is_a( OBJECT:derived_a, derived_d) =                        no
-is_a( STRING:derived_a, derived_d) =                        no
-is_subclass_of( OBJECT:derived_a, derived_d) =              no
-is_subclass_of( STRING:derived_a, derived_d) =              no
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, derived_d,true) =                      no
-is_a( STRING:undefB, derived_d) =                           no
-is_subclass_of( STRING:undefB, derived_d,false) =           no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, derived_d) =                 no
-
 >>> With Defined class
 is_a( OBJECT:derived_a, if_a) =                             yes
 is_a( STRING:derived_a, if_a) =                             no
+is_a( STRING:derived_a, if_a, true) =                       yes
 is_subclass_of( OBJECT:derived_a, if_a) =                   yes
 is_subclass_of( STRING:derived_a, if_a) =                   yes
+is_subclass_of( STRING:derived_a, if_a,false) =             no
 >>> With Undefined
 >>>> In __autoload: string(6) "undefB"
 is_a( STRING:undefB, if_a,true) =                           no
@@ -365,24 +301,13 @@ is_subclass_of( STRING:undefB, if_a,false) =                no
 >>>> In __autoload: string(6) "undefB"
 is_subclass_of( STRING:undefB, if_a) =                      no
 
->>> With Defined class
-is_a( OBJECT:derived_a, if_b) =                             no
-is_a( STRING:derived_a, if_b) =                             no
-is_subclass_of( OBJECT:derived_a, if_b) =                   no
-is_subclass_of( STRING:derived_a, if_b) =                   no
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, if_b,true) =                           no
-is_a( STRING:undefB, if_b) =                                no
-is_subclass_of( STRING:undefB, if_b,false) =                no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, if_b) =                      no
-
 >>> With Defined class
 is_a( OBJECT:derived_a, undefA) =                           no
 is_a( STRING:derived_a, undefA) =                           no
+is_a( STRING:derived_a, undefA, true) =                     no
 is_subclass_of( OBJECT:derived_a, undefA) =                 no
 is_subclass_of( STRING:derived_a, undefA) =                 no
+is_subclass_of( STRING:derived_a, undefA,false) =           no
 >>> With Undefined
 >>>> In __autoload: string(6) "undefB"
 is_a( STRING:undefB, undefA,true) =                         no
@@ -395,8 +320,10 @@ is_subclass_of( STRING:undefB, undefA) =                    no
 >>> With Defined class
 is_a( OBJECT:derived_b, base) =                             yes
 is_a( STRING:derived_b, base) =                             no
+is_a( STRING:derived_b, base, true) =                       yes
 is_subclass_of( OBJECT:derived_b, base) =                   yes
 is_subclass_of( STRING:derived_b, base) =                   yes
+is_subclass_of( STRING:derived_b, base,false) =             no
 >>> With Undefined
 >>>> In __autoload: string(6) "undefB"
 is_a( STRING:undefB, base,true) =                           no
@@ -408,8 +335,10 @@ is_subclass_of( STRING:undefB, base) =                      no
 >>> With Defined class
 is_a( OBJECT:derived_b, derived_a) =                        no
 is_a( STRING:derived_b, derived_a) =                        no
+is_a( STRING:derived_b, derived_a, true) =                  no
 is_subclass_of( OBJECT:derived_b, derived_a) =              no
 is_subclass_of( STRING:derived_b, derived_a) =              no
+is_subclass_of( STRING:derived_b, derived_a,false) =        no
 >>> With Undefined
 >>>> In __autoload: string(6) "undefB"
 is_a( STRING:undefB, derived_a,true) =                      no
@@ -418,50 +347,13 @@ is_subclass_of( STRING:undefB, derived_a,false) =           no
 >>>> In __autoload: string(6) "undefB"
 is_subclass_of( STRING:undefB, derived_a) =                 no
 
->>> With Defined class
-is_a( OBJECT:derived_b, derived_b) =                        yes
-is_a( STRING:derived_b, derived_b) =                        no
-is_subclass_of( OBJECT:derived_b, derived_b) =              no
-is_subclass_of( STRING:derived_b, derived_b) =              no
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, derived_b,true) =                      no
-is_a( STRING:undefB, derived_b) =                           no
-is_subclass_of( STRING:undefB, derived_b,false) =           no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, derived_b) =                 no
-
->>> With Defined class
-is_a( OBJECT:derived_b, derived_c) =                        no
-is_a( STRING:derived_b, derived_c) =                        no
-is_subclass_of( OBJECT:derived_b, derived_c) =              no
-is_subclass_of( STRING:derived_b, derived_c) =              no
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, derived_c,true) =                      no
-is_a( STRING:undefB, derived_c) =                           no
-is_subclass_of( STRING:undefB, derived_c,false) =           no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, derived_c) =                 no
-
->>> With Defined class
-is_a( OBJECT:derived_b, derived_d) =                        no
-is_a( STRING:derived_b, derived_d) =                        no
-is_subclass_of( OBJECT:derived_b, derived_d) =              no
-is_subclass_of( STRING:derived_b, derived_d) =              no
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, derived_d,true) =                      no
-is_a( STRING:undefB, derived_d) =                           no
-is_subclass_of( STRING:undefB, derived_d,false) =           no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, derived_d) =                 no
-
 >>> With Defined class
 is_a( OBJECT:derived_b, if_a) =                             yes
 is_a( STRING:derived_b, if_a) =                             no
+is_a( STRING:derived_b, if_a, true) =                       yes
 is_subclass_of( OBJECT:derived_b, if_a) =                   yes
 is_subclass_of( STRING:derived_b, if_a) =                   yes
+is_subclass_of( STRING:derived_b, if_a,false) =             no
 >>> With Undefined
 >>>> In __autoload: string(6) "undefB"
 is_a( STRING:undefB, if_a,true) =                           no
@@ -470,234 +362,13 @@ is_subclass_of( STRING:undefB, if_a,false) =                no
 >>>> In __autoload: string(6) "undefB"
 is_subclass_of( STRING:undefB, if_a) =                      no
 
->>> With Defined class
-is_a( OBJECT:derived_b, if_b) =                             yes
-is_a( STRING:derived_b, if_b) =                             no
-is_subclass_of( OBJECT:derived_b, if_b) =                   yes
-is_subclass_of( STRING:derived_b, if_b) =                   yes
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, if_b,true) =                           no
-is_a( STRING:undefB, if_b) =                                no
-is_subclass_of( STRING:undefB, if_b,false) =                no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, if_b) =                      no
-
 >>> With Defined class
 is_a( OBJECT:derived_b, undefA) =                           no
 is_a( STRING:derived_b, undefA) =                           no
+is_a( STRING:derived_b, undefA, true) =                     no
 is_subclass_of( OBJECT:derived_b, undefA) =                 no
 is_subclass_of( STRING:derived_b, undefA) =                 no
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, undefA,true) =                         no
-is_a( STRING:undefB, undefA) =                              no
-is_subclass_of( STRING:undefB, undefA,false) =              no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, undefA) =                    no
-
-
->>> With Defined class
-is_a( OBJECT:derived_c, base) =                             yes
-is_a( STRING:derived_c, base) =                             no
-is_subclass_of( OBJECT:derived_c, base) =                   yes
-is_subclass_of( STRING:derived_c, base) =                   yes
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, base,true) =                           no
-is_a( STRING:undefB, base) =                                no
-is_subclass_of( STRING:undefB, base,false) =                no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, base) =                      no
-
->>> With Defined class
-is_a( OBJECT:derived_c, derived_a) =                        yes
-is_a( STRING:derived_c, derived_a) =                        no
-is_subclass_of( OBJECT:derived_c, derived_a) =              yes
-is_subclass_of( STRING:derived_c, derived_a) =              yes
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, derived_a,true) =                      no
-is_a( STRING:undefB, derived_a) =                           no
-is_subclass_of( STRING:undefB, derived_a,false) =           no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, derived_a) =                 no
-
->>> With Defined class
-is_a( OBJECT:derived_c, derived_b) =                        no
-is_a( STRING:derived_c, derived_b) =                        no
-is_subclass_of( OBJECT:derived_c, derived_b) =              no
-is_subclass_of( STRING:derived_c, derived_b) =              no
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, derived_b,true) =                      no
-is_a( STRING:undefB, derived_b) =                           no
-is_subclass_of( STRING:undefB, derived_b,false) =           no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, derived_b) =                 no
-
->>> With Defined class
-is_a( OBJECT:derived_c, derived_c) =                        yes
-is_a( STRING:derived_c, derived_c) =                        no
-is_subclass_of( OBJECT:derived_c, derived_c) =              no
-is_subclass_of( STRING:derived_c, derived_c) =              no
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, derived_c,true) =                      no
-is_a( STRING:undefB, derived_c) =                           no
-is_subclass_of( STRING:undefB, derived_c,false) =           no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, derived_c) =                 no
-
->>> With Defined class
-is_a( OBJECT:derived_c, derived_d) =                        no
-is_a( STRING:derived_c, derived_d) =                        no
-is_subclass_of( OBJECT:derived_c, derived_d) =              no
-is_subclass_of( STRING:derived_c, derived_d) =              no
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, derived_d,true) =                      no
-is_a( STRING:undefB, derived_d) =                           no
-is_subclass_of( STRING:undefB, derived_d,false) =           no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, derived_d) =                 no
-
->>> With Defined class
-is_a( OBJECT:derived_c, if_a) =                             yes
-is_a( STRING:derived_c, if_a) =                             no
-is_subclass_of( OBJECT:derived_c, if_a) =                   yes
-is_subclass_of( STRING:derived_c, if_a) =                   yes
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, if_a,true) =                           no
-is_a( STRING:undefB, if_a) =                                no
-is_subclass_of( STRING:undefB, if_a,false) =                no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, if_a) =                      no
-
->>> With Defined class
-is_a( OBJECT:derived_c, if_b) =                             yes
-is_a( STRING:derived_c, if_b) =                             no
-is_subclass_of( OBJECT:derived_c, if_b) =                   yes
-is_subclass_of( STRING:derived_c, if_b) =                   yes
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, if_b,true) =                           no
-is_a( STRING:undefB, if_b) =                                no
-is_subclass_of( STRING:undefB, if_b,false) =                no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, if_b) =                      no
-
->>> With Defined class
-is_a( OBJECT:derived_c, undefA) =                           no
-is_a( STRING:derived_c, undefA) =                           no
-is_subclass_of( OBJECT:derived_c, undefA) =                 no
-is_subclass_of( STRING:derived_c, undefA) =                 no
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, undefA,true) =                         no
-is_a( STRING:undefB, undefA) =                              no
-is_subclass_of( STRING:undefB, undefA,false) =              no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, undefA) =                    no
-
-
->>> With Defined class
-is_a( OBJECT:derived_d, base) =                             yes
-is_a( STRING:derived_d, base) =                             no
-is_subclass_of( OBJECT:derived_d, base) =                   yes
-is_subclass_of( STRING:derived_d, base) =                   yes
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, base,true) =                           no
-is_a( STRING:undefB, base) =                                no
-is_subclass_of( STRING:undefB, base,false) =                no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, base) =                      no
-
->>> With Defined class
-is_a( OBJECT:derived_d, derived_a) =                        yes
-is_a( STRING:derived_d, derived_a) =                        no
-is_subclass_of( OBJECT:derived_d, derived_a) =              yes
-is_subclass_of( STRING:derived_d, derived_a) =              yes
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, derived_a,true) =                      no
-is_a( STRING:undefB, derived_a) =                           no
-is_subclass_of( STRING:undefB, derived_a,false) =           no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, derived_a) =                 no
-
->>> With Defined class
-is_a( OBJECT:derived_d, derived_b) =                        no
-is_a( STRING:derived_d, derived_b) =                        no
-is_subclass_of( OBJECT:derived_d, derived_b) =              no
-is_subclass_of( STRING:derived_d, derived_b) =              no
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, derived_b,true) =                      no
-is_a( STRING:undefB, derived_b) =                           no
-is_subclass_of( STRING:undefB, derived_b,false) =           no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, derived_b) =                 no
-
->>> With Defined class
-is_a( OBJECT:derived_d, derived_c) =                        yes
-is_a( STRING:derived_d, derived_c) =                        no
-is_subclass_of( OBJECT:derived_d, derived_c) =              yes
-is_subclass_of( STRING:derived_d, derived_c) =              yes
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, derived_c,true) =                      no
-is_a( STRING:undefB, derived_c) =                           no
-is_subclass_of( STRING:undefB, derived_c,false) =           no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, derived_c) =                 no
-
->>> With Defined class
-is_a( OBJECT:derived_d, derived_d) =                        yes
-is_a( STRING:derived_d, derived_d) =                        no
-is_subclass_of( OBJECT:derived_d, derived_d) =              no
-is_subclass_of( STRING:derived_d, derived_d) =              no
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, derived_d,true) =                      no
-is_a( STRING:undefB, derived_d) =                           no
-is_subclass_of( STRING:undefB, derived_d,false) =           no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, derived_d) =                 no
-
->>> With Defined class
-is_a( OBJECT:derived_d, if_a) =                             yes
-is_a( STRING:derived_d, if_a) =                             no
-is_subclass_of( OBJECT:derived_d, if_a) =                   yes
-is_subclass_of( STRING:derived_d, if_a) =                   yes
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, if_a,true) =                           no
-is_a( STRING:undefB, if_a) =                                no
-is_subclass_of( STRING:undefB, if_a,false) =                no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, if_a) =                      no
-
->>> With Defined class
-is_a( OBJECT:derived_d, if_b) =                             yes
-is_a( STRING:derived_d, if_b) =                             no
-is_subclass_of( OBJECT:derived_d, if_b) =                   yes
-is_subclass_of( STRING:derived_d, if_b) =                   yes
->>> With Undefined
->>>> In __autoload: string(6) "undefB"
-is_a( STRING:undefB, if_b,true) =                           no
-is_a( STRING:undefB, if_b) =                                no
-is_subclass_of( STRING:undefB, if_b,false) =                no
->>>> In __autoload: string(6) "undefB"
-is_subclass_of( STRING:undefB, if_b) =                      no
-
->>> With Defined class
-is_a( OBJECT:derived_d, undefA) =                           no
-is_a( STRING:derived_d, undefA) =                           no
-is_subclass_of( OBJECT:derived_d, undefA) =                 no
-is_subclass_of( STRING:derived_d, undefA) =                 no
+is_subclass_of( STRING:derived_b, undefA,false) =           no
 >>> With Undefined
 >>>> In __autoload: string(6) "undefB"
 is_a( STRING:undefB, undefA,true) =                         no