• [转]php的public、protected、private三种访问控制模式的区别


    FROM : http://blog.163.com/weiwenjuan_bj/blog/static/14035033620129304183850/?suggestedreading

    public: 公有类型

            在子类中可以通过self::var调用public方法或属性,parent::method调用父类方法

            在实例中可以能过$obj->var 来调用 public类型的方法或属性

    protected: 受保护类型
            在子类中可以通过self::var调用protected方法或属性,parent::method调用父类方法

            在实例中不能通过$obj->var 来调用  protected类型的方法或属性

    private: 私有类型
     该类型的属性或方法只能在该类中使用,在该类的实例、子类中、子类的实例中都不能调用私有类型的属性和方法


    2.self 和 parent 的区别
      a).在子类中常用到这两个对像。他们的主要区别在于self可以调用父类中的公有或受保护的属性,但parent不可以调用

      b).self:: 它表示当前类的静态成员(方法和属性) 与 $this 不同,$this是指当前对像

    附代码:

     1 <?php
     2 /**
     3  * parent 只能调用父类中的公有或受保护的方法,不能调用父类中的属性
     4  * self  可以调用父类中除私有类型的方法和属性外的所有数据
     5  */
     6 class User{
     7     public $name;
     8     private $passwd;
     9     protected $email;    
    10     public  function __construct(){
    11         //print __CLASS__." ";
    12         $this->name= 'simple';
    13         $this->passwd='123456';
    14         $this->email = 'bjbs_270@163.com';
    15     }    
    16     public function show(){
    17         print "good ";
    18     }    
    19     public function inUserClassPublic() {
    20         print __CLASS__.'::'.__FUNCTION__." ";
    21     }    
    22     protected  function inUserClassProtected(){
    23         print __CLASS__.'::'.__FUNCTION__." ";
    24     }    
    25     private function inUserClassPrivate(){
    26         print __CLASS__.'::'.__FUNCTION__." ";
    27     }
    28 }
    29 
    30 class simpleUser extends User {    
    31     public function __construct(){        
    32         //print __CLASS__." ";
    33         parent::__construct();
    34     }
    35     
    36     public function show(){
    37         print $this->name."//public ";        
    38         print $this->passwd."//private ";
    39         print $this->email."//protected ";
    40     }
    41     
    42     public function inSimpleUserClassPublic() {
    43         print __CLASS__.'::'.__FUNCTION__." ";
    44     }
    45     
    46     protected function inSimpleUserClassProtected(){
    47         print __CLASS__.'::'.__FUNCTION__." ";
    48     }
    49     
    50     private function inSimpleUserClassPrivate() {
    51         print __CLASS__.'::'.__FUNCTION__." ";
    52     }
    53 }
    54 
    55 class adminUser extends simpleUser {
    56     protected $admin_user;
    57     public function __construct(){
    58         //print __CLASS__." ";
    59         parent::__construct();
    60     }
    61     
    62     public function inAdminUserClassPublic(){
    63         print __CLASS__.'::'.__FUNCTION__." ";
    64     }
    65     
    66     protected function inAdminUserClassProtected(){
    67         print __CLASS__.'::'.__FUNCTION__." ";
    68     }
    69     
    70     private function inAdminUserClassPrivate(){
    71         print __CLASS__.'::'.__FUNCTION__." ";
    72     }
    73 }
    74 
    75 class administrator extends adminUser {
    76     public function __construct(){        
    77         parent::__construct();
    78     }
    79 }
    80 
    81 /**
    82  * 在类的实例中 只有公有属性和方法才可以通过实例化来调用
    83  */
    84 $s = new administrator();
    85 print '-------------------';
    86 $s->show();
    87 ?>
  • 相关阅读:
    Centos7安装Tomcat
    Centos7安装Java8
    NumPy
    面试题(2020)前端HTTP浏览器相关面试题
    面试题(2020)Vue面试题汇总
    面试题(2020)微信小程序常见面试题
    QuantLib 金融计算——案例之主成分久期(PCD)
    QuantLib 金融计算——案例之 KRD、Fisher-Weil 久期及久期的解释能力
    QuantLib 金融计算——一个使用 ActualActual 时需要注意的陷阱
    python selenium list index out of range
  • 原文地址:https://www.cnblogs.com/Athrun/p/3979250.html
Copyright © 2020-2023  润新知