第十八节:类与对象构造函数和析构函数访问控制对象继承

构造函数和析构函数

此处要注意一个知识点,就是子类和父类他们的__construct和__destruct之间的关系,子类不会执行父类的__construct和__destruct除非在子类的

__construct和__destruct中,通过parent::__construct()或parent::__destruct()调用

 1 <?php
 2 class Baseclass{
 3     function __construct(){
 4         print "In BaseClass construct\n";
 5         }
 6 }
 7 class Subclass extends Baseclass{
 8     function __construct(){
 9         parent::__construct();
10         print "In SubClass construct\n";
11         }
12     }
13 $obj=new Baseclass();//输出 In BaseClass construct
14 $obj=new Subclass();//输出     In BaseClass construct In SubClass construct
15 ?>

在__destruct中 即使程序中有exit 析构函数仍然会被执行

 1 <?php
 2 class MyDestructableClass{
 3     function __construct(){
 4         print "In constructor\n";
 5         $this->name="MyDestructableClass";
 6         exit;//即使有exit __destruct依然执行。
 7         }
 8     function __destruct(){
 9         print "Destroing".$this->name."\n";
10         }    
11     }
12 $obj=new MyDestructableClass();    //输出In constructor DestroingMyDestructableClass        
13 ?>

访问控制

对属性或方法的访问控制,是通过在前面添加关键字 public、protected 或 private 来实现的。由 public 所定义的类成员可以在任何地方被访问;由 protected 所定义的类成员则可以被其所在类的子类和父类访问(当然,该成员所在的类也可以访问);而由 private 定义的类成员则只能被其所在类访问。 

类中的方法都必须使用关键字public、protected 或 private 进行定义。如果没有设置这些关键字,则该方法会被设置成默认的 public。

对象的继承

继承已为大家所熟知的一个程序设计特性,PHP 的对象模型也使用了继承。继承将会影响到类与类,对象与对象之间的关系。

比如,当扩展一个类,子类就会继承父类的所有公有和保护方法。但是子类的方法会覆盖父类的方法。

继承对于功能的设计和抽象是非常有用的,而且对于类似的对象增加新功能就无须重新再写这些公用的功能。 

注意当子类的方法覆盖父类的方法时通过parent::fun();调用。

 1 <?php
 2 class FaClass{
 3     function foo(){
 4         var_dump(Faclass);
 5         }
 6     }    
 7 class SonClass extends FaClass{
 8     function __construct(){
 9         $this->foo();
10         }
11     function foo(){
12         parent::foo();
13         var_dump(SonClass);
14         }
15     }     
16 $obj=new SonClass();    //string(7) "Faclass" string(8) "SonClass"
17 ?>
原文地址:https://www.cnblogs.com/saw2012/p/2890679.html