Return to is_a.phpt CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / standard / tests / class_object |
1.1 misho 1: --TEST-- 2: is_a and is_subclass_of behaviour (with and without autoload) 3: --SKIPIF-- 4: <?php if (version_compare(zend_version(), '2.0.0-dev', '<')) die('skip ZendEngine 2 needed'); ?> 5: --FILE-- 6: <?php 7: 8: interface if_a { 9: function f_a(); 10: } 11: 12: interface if_b extends if_a { 13: function f_b(); 14: } 15: 16: class base { 17: function _is_a($sub) { 18: 19: echo "\n>>> With Defined class\n"; 20: echo str_pad('is_a( OBJECT:'.get_class($this).', '.$sub.') = ', 60) . (is_a($this, $sub) ? 'yes' : 'no')."\n"; 21: echo str_pad('is_a( STRING:'.get_class($this).', '.$sub.') = ', 60). (is_a(get_class($this), $sub) ? 'yes' : 'no')."\n"; 22: echo str_pad('is_a( STRING:'.get_class($this).', '.$sub.', true) = ', 60). (is_a(get_class($this), $sub, true) ? 'yes' : 'no')."\n"; 23: echo str_pad('is_subclass_of( OBJECT:'.get_class($this).', '.$sub.') = ', 60). (is_subclass_of($this, $sub) ? 'yes' : 'no')."\n"; 24: echo str_pad('is_subclass_of( STRING:'.get_class($this).', '.$sub.') = ', 60). (is_subclass_of(get_class($this), $sub) ? 'yes' : 'no')."\n"; 25: echo str_pad('is_subclass_of( STRING:'.get_class($this).', '.$sub.',false) = ', 60). (is_subclass_of(get_class($this), $sub , false) ? 'yes' : 'no')."\n"; 26: 27: // with autoload options.. 28: echo ">>> With Undefined\n"; 29: echo str_pad('is_a( STRING:undefB, '.$sub.',true) = ', 60). (is_a('undefB', $sub, true) ? 'yes' : 'no')."\n"; 30: echo str_pad('is_a( STRING:undefB, '.$sub.') = ', 60). (is_a('undefB', $sub) ? 'yes' : 'no')."\n"; 31: echo str_pad('is_subclass_of( STRING:undefB, '.$sub.',false) = ', 60). (is_subclass_of('undefB', $sub, false) ? 'yes' : 'no')."\n"; 32: echo str_pad('is_subclass_of( STRING:undefB, '.$sub.') = ', 60). (is_subclass_of('undefB', $sub) ? 'yes' : 'no')."\n"; 33: } 34: function test() { 35: echo $this->_is_a('base'); 36: echo $this->_is_a('derived_a'); 37: echo $this->_is_a('if_a'); 38: echo $this->_is_a('undefA'); 39: echo "\n"; 40: } 41: } 42: 43: class derived_a extends base implements if_a { 44: function f_a() {} 45: } 46: 47: class derived_b extends base implements if_a, if_b { 48: function f_a() {} 49: function f_b() {} 50: } 51: 52: class derived_c extends derived_a implements if_b { 53: function f_b() {} 54: } 55: 56: class derived_d extends derived_c { 57: } 58: 59: $t = new base(); 60: $t->test(); 61: 62: $t = new derived_a(); 63: $t->test(); 64: 65: eval(' 66: function __autoload($name) 67: { 68: echo ">>>> In __autoload: "; 69: var_dump($name); 70: } 71: '); 72: 73: echo "NOW WITH AUTOLOAD\n\n"; 74: 75: $t = new base(); 76: $t->test(); 77: 78: $t = new derived_a(); 79: $t->test(); 80: 81: $t = new derived_b(); 82: $t->test(); 83: 84: 85: 86: 87: 88: ?> 89: --EXPECTF-- 90: >>> With Defined class 91: is_a( OBJECT:base, base) = yes 92: is_a( STRING:base, base) = no 93: is_a( STRING:base, base, true) = yes 94: is_subclass_of( OBJECT:base, base) = no 95: is_subclass_of( STRING:base, base) = no 96: is_subclass_of( STRING:base, base,false) = no 97: >>> With Undefined 98: is_a( STRING:undefB, base,true) = no 99: is_a( STRING:undefB, base) = no 100: is_subclass_of( STRING:undefB, base,false) = no 101: is_subclass_of( STRING:undefB, base) = no 102: 103: >>> With Defined class 104: is_a( OBJECT:base, derived_a) = no 105: is_a( STRING:base, derived_a) = no 106: is_a( STRING:base, derived_a, true) = no 107: is_subclass_of( OBJECT:base, derived_a) = no 108: is_subclass_of( STRING:base, derived_a) = no 109: is_subclass_of( STRING:base, derived_a,false) = no 110: >>> With Undefined 111: is_a( STRING:undefB, derived_a,true) = no 112: is_a( STRING:undefB, derived_a) = no 113: is_subclass_of( STRING:undefB, derived_a,false) = no 114: is_subclass_of( STRING:undefB, derived_a) = no 115: 116: >>> With Defined class 117: is_a( OBJECT:base, if_a) = no 118: is_a( STRING:base, if_a) = no 119: is_a( STRING:base, if_a, true) = no 120: is_subclass_of( OBJECT:base, if_a) = no 121: is_subclass_of( STRING:base, if_a) = no 122: is_subclass_of( STRING:base, if_a,false) = no 123: >>> With Undefined 124: is_a( STRING:undefB, if_a,true) = no 125: is_a( STRING:undefB, if_a) = no 126: is_subclass_of( STRING:undefB, if_a,false) = no 127: is_subclass_of( STRING:undefB, if_a) = no 128: 129: >>> With Defined class 130: is_a( OBJECT:base, undefA) = no 131: is_a( STRING:base, undefA) = no 132: is_a( STRING:base, undefA, true) = no 133: is_subclass_of( OBJECT:base, undefA) = no 134: is_subclass_of( STRING:base, undefA) = no 135: is_subclass_of( STRING:base, undefA,false) = no 136: >>> With Undefined 137: is_a( STRING:undefB, undefA,true) = no 138: is_a( STRING:undefB, undefA) = no 139: is_subclass_of( STRING:undefB, undefA,false) = no 140: is_subclass_of( STRING:undefB, undefA) = no 141: 142: 143: >>> With Defined class 144: is_a( OBJECT:derived_a, base) = yes 145: is_a( STRING:derived_a, base) = no 146: is_a( STRING:derived_a, base, true) = yes 147: is_subclass_of( OBJECT:derived_a, base) = yes 148: is_subclass_of( STRING:derived_a, base) = yes 149: is_subclass_of( STRING:derived_a, base,false) = no 150: >>> With Undefined 151: is_a( STRING:undefB, base,true) = no 152: is_a( STRING:undefB, base) = no 153: is_subclass_of( STRING:undefB, base,false) = no 154: is_subclass_of( STRING:undefB, base) = no 155: 156: >>> With Defined class 157: is_a( OBJECT:derived_a, derived_a) = yes 158: is_a( STRING:derived_a, derived_a) = no 159: is_a( STRING:derived_a, derived_a, true) = yes 160: is_subclass_of( OBJECT:derived_a, derived_a) = no 161: is_subclass_of( STRING:derived_a, derived_a) = no 162: is_subclass_of( STRING:derived_a, derived_a,false) = no 163: >>> With Undefined 164: is_a( STRING:undefB, derived_a,true) = no 165: is_a( STRING:undefB, derived_a) = no 166: is_subclass_of( STRING:undefB, derived_a,false) = no 167: is_subclass_of( STRING:undefB, derived_a) = no 168: 169: >>> With Defined class 170: is_a( OBJECT:derived_a, if_a) = yes 171: is_a( STRING:derived_a, if_a) = no 172: is_a( STRING:derived_a, if_a, true) = yes 173: is_subclass_of( OBJECT:derived_a, if_a) = yes 174: is_subclass_of( STRING:derived_a, if_a) = yes 175: is_subclass_of( STRING:derived_a, if_a,false) = no 176: >>> With Undefined 177: is_a( STRING:undefB, if_a,true) = no 178: is_a( STRING:undefB, if_a) = no 179: is_subclass_of( STRING:undefB, if_a,false) = no 180: is_subclass_of( STRING:undefB, if_a) = no 181: 182: >>> With Defined class 183: is_a( OBJECT:derived_a, undefA) = no 184: is_a( STRING:derived_a, undefA) = no 185: is_a( STRING:derived_a, undefA, true) = no 186: is_subclass_of( OBJECT:derived_a, undefA) = no 187: is_subclass_of( STRING:derived_a, undefA) = no 188: is_subclass_of( STRING:derived_a, undefA,false) = no 189: >>> With Undefined 190: is_a( STRING:undefB, undefA,true) = no 191: is_a( STRING:undefB, undefA) = no 192: is_subclass_of( STRING:undefB, undefA,false) = no 193: is_subclass_of( STRING:undefB, undefA) = no 194: 195: NOW WITH AUTOLOAD 196: 197: 198: >>> With Defined class 199: is_a( OBJECT:base, base) = yes 200: is_a( STRING:base, base) = no 201: is_a( STRING:base, base, true) = yes 202: is_subclass_of( OBJECT:base, base) = no 203: is_subclass_of( STRING:base, base) = no 204: is_subclass_of( STRING:base, base,false) = no 205: >>> With Undefined 206: >>>> In __autoload: string(6) "undefB" 207: is_a( STRING:undefB, base,true) = no 208: is_a( STRING:undefB, base) = no 209: is_subclass_of( STRING:undefB, base,false) = no 210: >>>> In __autoload: string(6) "undefB" 211: is_subclass_of( STRING:undefB, base) = no 212: 213: >>> With Defined class 214: is_a( OBJECT:base, derived_a) = no 215: is_a( STRING:base, derived_a) = no 216: is_a( STRING:base, derived_a, true) = no 217: is_subclass_of( OBJECT:base, derived_a) = no 218: is_subclass_of( STRING:base, derived_a) = no 219: is_subclass_of( STRING:base, derived_a,false) = no 220: >>> With Undefined 221: >>>> In __autoload: string(6) "undefB" 222: is_a( STRING:undefB, derived_a,true) = no 223: is_a( STRING:undefB, derived_a) = no 224: is_subclass_of( STRING:undefB, derived_a,false) = no 225: >>>> In __autoload: string(6) "undefB" 226: is_subclass_of( STRING:undefB, derived_a) = no 227: 228: >>> With Defined class 229: is_a( OBJECT:base, if_a) = no 230: is_a( STRING:base, if_a) = no 231: is_a( STRING:base, if_a, true) = no 232: is_subclass_of( OBJECT:base, if_a) = no 233: is_subclass_of( STRING:base, if_a) = no 234: is_subclass_of( STRING:base, if_a,false) = no 235: >>> With Undefined 236: >>>> In __autoload: string(6) "undefB" 237: is_a( STRING:undefB, if_a,true) = no 238: is_a( STRING:undefB, if_a) = no 239: is_subclass_of( STRING:undefB, if_a,false) = no 240: >>>> In __autoload: string(6) "undefB" 241: is_subclass_of( STRING:undefB, if_a) = no 242: 243: >>> With Defined class 244: is_a( OBJECT:base, undefA) = no 245: is_a( STRING:base, undefA) = no 246: is_a( STRING:base, undefA, true) = no 247: is_subclass_of( OBJECT:base, undefA) = no 248: is_subclass_of( STRING:base, undefA) = no 249: is_subclass_of( STRING:base, undefA,false) = no 250: >>> With Undefined 251: >>>> In __autoload: string(6) "undefB" 252: is_a( STRING:undefB, undefA,true) = no 253: is_a( STRING:undefB, undefA) = no 254: is_subclass_of( STRING:undefB, undefA,false) = no 255: >>>> In __autoload: string(6) "undefB" 256: is_subclass_of( STRING:undefB, undefA) = no 257: 258: 259: >>> With Defined class 260: is_a( OBJECT:derived_a, base) = yes 261: is_a( STRING:derived_a, base) = no 262: is_a( STRING:derived_a, base, true) = yes 263: is_subclass_of( OBJECT:derived_a, base) = yes 264: is_subclass_of( STRING:derived_a, base) = yes 265: is_subclass_of( STRING:derived_a, base,false) = no 266: >>> With Undefined 267: >>>> In __autoload: string(6) "undefB" 268: is_a( STRING:undefB, base,true) = no 269: is_a( STRING:undefB, base) = no 270: is_subclass_of( STRING:undefB, base,false) = no 271: >>>> In __autoload: string(6) "undefB" 272: is_subclass_of( STRING:undefB, base) = no 273: 274: >>> With Defined class 275: is_a( OBJECT:derived_a, derived_a) = yes 276: is_a( STRING:derived_a, derived_a) = no 277: is_a( STRING:derived_a, derived_a, true) = yes 278: is_subclass_of( OBJECT:derived_a, derived_a) = no 279: is_subclass_of( STRING:derived_a, derived_a) = no 280: is_subclass_of( STRING:derived_a, derived_a,false) = no 281: >>> With Undefined 282: >>>> In __autoload: string(6) "undefB" 283: is_a( STRING:undefB, derived_a,true) = no 284: is_a( STRING:undefB, derived_a) = no 285: is_subclass_of( STRING:undefB, derived_a,false) = no 286: >>>> In __autoload: string(6) "undefB" 287: is_subclass_of( STRING:undefB, derived_a) = no 288: 289: >>> With Defined class 290: is_a( OBJECT:derived_a, if_a) = yes 291: is_a( STRING:derived_a, if_a) = no 292: is_a( STRING:derived_a, if_a, true) = yes 293: is_subclass_of( OBJECT:derived_a, if_a) = yes 294: is_subclass_of( STRING:derived_a, if_a) = yes 295: is_subclass_of( STRING:derived_a, if_a,false) = no 296: >>> With Undefined 297: >>>> In __autoload: string(6) "undefB" 298: is_a( STRING:undefB, if_a,true) = no 299: is_a( STRING:undefB, if_a) = no 300: is_subclass_of( STRING:undefB, if_a,false) = no 301: >>>> In __autoload: string(6) "undefB" 302: is_subclass_of( STRING:undefB, if_a) = no 303: 304: >>> With Defined class 305: is_a( OBJECT:derived_a, undefA) = no 306: is_a( STRING:derived_a, undefA) = no 307: is_a( STRING:derived_a, undefA, true) = no 308: is_subclass_of( OBJECT:derived_a, undefA) = no 309: is_subclass_of( STRING:derived_a, undefA) = no 310: is_subclass_of( STRING:derived_a, undefA,false) = no 311: >>> With Undefined 312: >>>> In __autoload: string(6) "undefB" 313: is_a( STRING:undefB, undefA,true) = no 314: is_a( STRING:undefB, undefA) = no 315: is_subclass_of( STRING:undefB, undefA,false) = no 316: >>>> In __autoload: string(6) "undefB" 317: is_subclass_of( STRING:undefB, undefA) = no 318: 319: 320: >>> With Defined class 321: is_a( OBJECT:derived_b, base) = yes 322: is_a( STRING:derived_b, base) = no 323: is_a( STRING:derived_b, base, true) = yes 324: is_subclass_of( OBJECT:derived_b, base) = yes 325: is_subclass_of( STRING:derived_b, base) = yes 326: is_subclass_of( STRING:derived_b, base,false) = no 327: >>> With Undefined 328: >>>> In __autoload: string(6) "undefB" 329: is_a( STRING:undefB, base,true) = no 330: is_a( STRING:undefB, base) = no 331: is_subclass_of( STRING:undefB, base,false) = no 332: >>>> In __autoload: string(6) "undefB" 333: is_subclass_of( STRING:undefB, base) = no 334: 335: >>> With Defined class 336: is_a( OBJECT:derived_b, derived_a) = no 337: is_a( STRING:derived_b, derived_a) = no 338: is_a( STRING:derived_b, derived_a, true) = no 339: is_subclass_of( OBJECT:derived_b, derived_a) = no 340: is_subclass_of( STRING:derived_b, derived_a) = no 341: is_subclass_of( STRING:derived_b, derived_a,false) = no 342: >>> With Undefined 343: >>>> In __autoload: string(6) "undefB" 344: is_a( STRING:undefB, derived_a,true) = no 345: is_a( STRING:undefB, derived_a) = no 346: is_subclass_of( STRING:undefB, derived_a,false) = no 347: >>>> In __autoload: string(6) "undefB" 348: is_subclass_of( STRING:undefB, derived_a) = no 349: 350: >>> With Defined class 351: is_a( OBJECT:derived_b, if_a) = yes 352: is_a( STRING:derived_b, if_a) = no 353: is_a( STRING:derived_b, if_a, true) = yes 354: is_subclass_of( OBJECT:derived_b, if_a) = yes 355: is_subclass_of( STRING:derived_b, if_a) = yes 356: is_subclass_of( STRING:derived_b, if_a,false) = no 357: >>> With Undefined 358: >>>> In __autoload: string(6) "undefB" 359: is_a( STRING:undefB, if_a,true) = no 360: is_a( STRING:undefB, if_a) = no 361: is_subclass_of( STRING:undefB, if_a,false) = no 362: >>>> In __autoload: string(6) "undefB" 363: is_subclass_of( STRING:undefB, if_a) = no 364: 365: >>> With Defined class 366: is_a( OBJECT:derived_b, undefA) = no 367: is_a( STRING:derived_b, undefA) = no 368: is_a( STRING:derived_b, undefA, true) = no 369: is_subclass_of( OBJECT:derived_b, undefA) = no 370: is_subclass_of( STRING:derived_b, undefA) = no 371: is_subclass_of( STRING:derived_b, undefA,false) = no 372: >>> With Undefined 373: >>>> In __autoload: string(6) "undefB" 374: is_a( STRING:undefB, undefA,true) = no 375: is_a( STRING:undefB, undefA) = no 376: is_subclass_of( STRING:undefB, undefA,false) = no 377: >>>> In __autoload: string(6) "undefB" 378: is_subclass_of( STRING:undefB, undefA) = no