class SubClass extends BaseClass { function __construct() { parent::__construct(); print "In SubClass constructor
"; } }
class OtherSubClass extends BaseClass { // inherits BaseClass"s constructor }
// In BaseClass constructor $obj = new BaseClass();
// In BaseClass constructor // In SubClass constructor $obj = new SubClass();
// In BaseClass constructor $obj = new OtherSubClass(); ?>
output: In BaseClass constructor In BaseClass constructor In SubClass constructor In BaseClass constructor 为了实现向后兼容性,如果 PHP 5 在类中找不到 __construct() 函数并且也没有从父类继承一个的话,它就会尝试寻找旧式的构造函数,也就是和类同名的函数。因此唯一会产生兼容性问题的情况是:类中已有一个名为 __construct() 的方法却被用于其它用途时。 与其它方法不同,当 __construct() 被与父类 __construct() 具有不同参数的方法覆盖时,PHP 不会产生一个 E_STRICT 错误信息。 自 PHP 5.3.3 起,在命名空间中,与类名同名的方法不再作为构造函数。这一改变不影响不在命名空间中的类。 Example#2 Constructors in namespaced classes 复制代码 代码如下: <?php namespace Foo; class Bar { public function Bar() { // treated as constructor in PHP 5.3.0-5.3.2 // treated as regular method as of PHP 5.3.3 } } ?>
析构函数 void __destruct(void) PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,如 C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。 Example#3析构函数示例 复制代码 代码如下: <?php class MyDestructableClass { function __construct() { print "In constructor
"; $this->name = "MyDestructableClass"; } function __destruct() { print "Destroying " . $this->name . "
"; } } $obj = new MyDestructableClass(); ?>