PHP中private、public、protected的区别详解

PHP中private、public、protected的区别详解
先简单粗俗的描述下:
public 表示全局,类内部外部子类都可以访问;
private表示私有的,只有本类内部可以使用;
protected表示受保护的,只有本类或子类或父类中可以访问;

再啰嗦的解释下:
一、
public: 公有类型
在子类中可以通过 self::属性名(或方法名)  调用public方法或属性,parent::方法名 调用父类方法
在实例中可以能过 $obj->属性名(或方法名) 来调用 public类型的方法或属性
protected: 受保护类型
在子类中可以通过 self::属性名(或方法名) 调用protected方法或属性,parent::属性名(或方法名) 调用父类方法。
在实例中不能通过 $obj->属性名(或方法名) 来调用  protected类型的方法或属性   
private: 私有类型
该类型的属性或方法只能在该类中使用,
在该类的实例、子类中、子类的实例中都不能调用私有类型的属性和方法
二、
self 和parent 的区别
  a).在子类中常用到这两个对象。他们的主要区别在于self可以调用父类中的公有或受保护的属性,但parent不可以调用
  b).self:: 它表示当前类的静态成员(方法和属性)与 $this不同,$this是指当前对像

<?php
//父类
class father{
    public function a(){
        echo "<br>public function a".PHP_EOL;
        // $this->c(); //这样就可以用当前类的子类方法
    }
    private function b(){
        echo "<br>private function b".PHP_EOL;
    }
    protected function c(){
        echo "<br>protected function c".PHP_EOL;
    }

    static function x(){
            echo "<br>static function x".PHP_EOL;
    }

}
//子类
class child extends father{
    function d(){
        parent::a();//调用父类的a方法  √√√
        $this->a(); //调用父类的a方法  √√√


    }
    
    function f(){
        parent::b(); //调用父类的b方法   ×××   显示错误 无法调用父类private的方法  Uncaught Error: Call to private method father::b()
        $this->b();  //调用父类的b方法   ×××   显示错误 无法调用父类private的方法  Uncaught Error: Call to private method father::b()

    }

    function e(){
        parent::c(); //调用父类的c方法   √√√
        $this->c();  //调用父类的c方法   √√√   
    }

    function y(){
        parent::x();
    }
  
}
$father=new father();
$father->a(); //输出 public function a
$father->b(); //显示错误 外部无法调用私有的方法
$father->c(); //显示错误 外部无法调用受保护的方法
$father->x();    // √√√

$chlid=new child();
$chlid->d();//输出 public function a
$chlid->e(); ////输出 protected function c
$chlid->f();//显示错误 无法调用父类private的方法  Uncaught Error: Call to private method father::b()
$child->x();//显示错误
$child->y();//显示错误
father::x(); //√√√   静态方法不需要实例化即可调用
child::x();  //√√√   静态方法不需要实例化即可调用  (子类也可以调用父类的静态方法)

添加新评论