美文网首页程序员PHP经验分享
private、public、protected的区别详解

private、public、protected的区别详解

作者: PHP__架构师之路 | 来源:发表于2019-03-27 18:56 被阅读2次

    先简单粗俗的描述下:

    1. public 表示全局,类内部外部子类都可以访问;
    2. private表示私有的,只有本类内部可以使用;
    3. protected表示受保护的,只有本类或子类或父类中可以访问;

    再啰嗦的解释下:

    一、

    public: 公有类型

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

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

    protected: 受保护类型

    在子类中可以通过 self::属性名(或方法名) 调用protected方法或属性,parent::属性名(或方法名) 调用父类方法。

    <a style='color:red'>在实例中不能通过 $obj->属性名(或方法名) 来调用 protected类型的方法或属性</a>

    private: 私有类型
    该类型的属性或方法只能在该类中使用,

    <a style='color:red'>在该类的实例、子类中、子类的实例中都不能调用私有类型的属性和方法</a>

    二、

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

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

    直接上一示例:

    <?php
    //父类
    class father{
        public function a(){
            echo "public function a".PHP_EOL;
        }
        private function b(){
            echo "private function b".PHP_EOL;
        }
        protected function c(){
            echo "protected function c".PHP_EOL;
        }
    }
    //子类
    class child extends father{
        function d(){
            parent::a();//调用父类的a方法
        }
        function e(){
            parent::c(); //调用父类的c方法
        }
        function f(){
            parent::b(); //调用父类的b方法
        }
    }
    $father=new father();
    $father->a(); //输出 public function a
    $father->b(); //显示错误 外部无法调用私有的方法
    $father->c(); //显示错误 外部无法调用受保护的方法
    $chlid=new child();
    $chlid->d();//输出 public function a
    $chlid->e(); ////输出 protected function c
    $chlid->f();//显示错误 无法调用父类private的方法  Uncaught Error: Call to private method father::b() from context 'child'
    

    相关文章

      网友评论

        本文标题:private、public、protected的区别详解

        本文链接:https://www.haomeiwen.com/subject/atutbqtx.html