1--TEST-- 2ZE2 A derived class can use the inherited constructor/destructor 3--FILE-- 4<?php 5 6// This test checks for: 7// - inherited constructors/destructors are not called automatically 8// - base classes know about derived properties in constructor/destructor 9// - base class constructors/destructors know the instantiated class name 10 11class base { 12 public $name; 13 14 function __construct() { 15 echo __CLASS__ . "::" . __FUNCTION__ . "\n"; 16 $this->name = 'base'; 17 print_r($this); 18 } 19 20 function __destruct() { 21 echo __CLASS__ . "::" . __FUNCTION__ . "\n"; 22 print_r($this); 23 } 24} 25 26class derived extends base { 27 public $other; 28 29 function __construct() { 30 $this->name = 'init'; 31 $this->other = 'other'; 32 print_r($this); 33 parent::__construct(); 34 echo __CLASS__ . "::" . __FUNCTION__ . "\n"; 35 $this->name = 'derived'; 36 print_r($this); 37 } 38 39 function __destruct() { 40 parent::__destruct(); 41 echo __CLASS__ . "::" . __FUNCTION__ . "\n"; 42 print_r($this); 43 } 44} 45 46echo "Testing class base\n"; 47$t = new base(); 48unset($t); 49echo "Testing class derived\n"; 50$t = new derived(); 51unset($t); 52 53echo "Done\n"; 54?> 55--EXPECT-- 56Testing class base 57base::__construct 58base Object 59( 60 [name] => base 61) 62base::__destruct 63base Object 64( 65 [name] => base 66) 67Testing class derived 68derived Object 69( 70 [other] => other 71 [name] => init 72) 73base::__construct 74derived Object 75( 76 [other] => other 77 [name] => base 78) 79derived::__construct 80derived Object 81( 82 [other] => other 83 [name] => derived 84) 85base::__destruct 86derived Object 87( 88 [other] => other 89 [name] => derived 90) 91derived::__destruct 92derived Object 93( 94 [other] => other 95 [name] => derived 96) 97Done 98