构造函数和析构函数
PHP 5允许开发者在一个类中定义一个方法作为构造函数,具有构造函数的类会在每次创建对象时先调用该方法,一般在构造函数中做一些初始化工作。其语法格式如下:
void --construct ([ mixed $args [, $... ]] )
如果子类中定义了构造函数,则不会自动调用父类构造函数。要执行父类构造函数,需要在子类的构造函数中调用parent::__construct()。
<?phpclass BaseClass { function __construct() { print "对象初始化构造函数"; }}class SubClass extends BaseClass { function __construct() { parent:__construct(); print "初始化子类"; }}$obj = new BaseClass(); //自动显示:对象初始化构造函数$obj = new SubClass(); //自动执行父类和子类的构造函数?>
为了实现向后兼容性,如果PHP 5在类中找不到__construct()函数,它就会尝试寻找旧式的构造函数,也就是和类同名的函数。
析构函数就是在对象的所有引用都被删除或者当对象被显式销毁时执行。其语法格式如下:
void --destruct ( void )
例如,在下面示例中将会自动执行构造函数和析构函数。
<?phpclass MyClass { function __construct() { print "构造函数"; } function __destruct() { print "析构函数"; }}$obj = new MyClass();?>
与构造函数一样,父类的析构函数不会被引擎自动调用。要执行父类的析构函数,必须在子类的析构函数体中显式调用parent::__destruct()。
对象继承
继承是面向对象编程的基本特性,PHP的对象模型也支持继承。继承将会影响到类与类、对象与对象之间的关系。当扩展一个类,子类就会继承父类的所有公有和保护方法。
但是子类的方法会覆盖父类的方法。
例如,在下面示例中,子类bar继承父类foo的printPHP()方法,同时重写了父类的printItem()方法。
<?phpclass foo{ public function printItem($string) { echo 'Foo: ' . $string; } public function printPHP(){ echo 'PHP is great.'; }}class bar extends foo{ public function printItem($string) { echo 'Bar: ' . $string; }}$foo = new foo();$bar = new bar();$foo->printItem('baz'); //显示:Foo: baz$foo->printPHP(); //显示:PHP is great$bar->printItem('baz'); //显示:Bar: baz$bar->printPHP(); //显示:PHP is great?>
继承对于功能的设计和抽象是非常有用的,而且对于类似的对象增加新功能就无须重新再写这些公用的功能。
抽象类
抽象类不能直接被实例化,必须先继承该抽象类,然后再实例化子类。抽象类中至少包含一个抽象方法。如果类方法被声明为抽象的,那么其中就不能包括具体的功能实现。继承一个抽象类时,子类必须实现抽象类中的所有抽象方法。如果抽象类中某个抽象方法被声明为protected,那么子类中实现的方法就应该声明为protected或者public,而不能定义为private。如:
<?phpabstract class AbstractClass{ abstract protected function getValue(); //强制子类必须定义的方法 public function printOut() { //普通方法(非抽象方法)print $this->getValue() . "\n"; }}class Class1 extends AbstractClass{ protected function getValue() { //具体化抽象方法 return "子类1"; }}$class1 = new Class1;$class1->printOut(); //显示:子类1?>
注意:抽象类的子类中的普通方法执行方式和其他类相同。
当前文章标题:PHP类和对象(2)
当前URL:http://www.lyjtt.cn/news/wzzz/3250.html
上一篇:PHP类和对象(1)
下一篇:PHP编码规范