zoukankan      html  css  js  c++  java
  • 第十八节:类与对象构造函数和析构函数访问控制对象继承

    构造函数和析构函数

    此处要注意一个知识点,就是子类和父类他们的__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 ?>
  • 相关阅读:
    luogu P2015 二叉苹果树
    luogu P1197 [JSOI2008]星球大战
    QBXT T15214 Day2上午遭遇
    luogu P2831 愤怒的小鸟
    luogu P1018 乘积最大
    [BZOJ2402]陶陶的难题II(树链剖分+线段树维护凸包+分数规划)
    [BZOJ1500][NOI2005]维修数列(splay)
    [BZOJ3282]Tree(LCT)
    [BZOJ4785][ZJOI2017]树状数组(概率+二维线段树)
    [BZOJ2427][HAOI2010]软件安装(Tarjan+DP)
  • 原文地址:https://www.cnblogs.com/saw2012/p/2890679.html
Copyright © 2011-2022 走看看