public(公有),protected(受保护)或 private(私有)

访问控制(可见性)

对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。
被定义为 公有的类成员 可以在任何地方被访问。
被定义为 受保护的类成员 则可以被其自身以及其子类和父类访问。
被定义为 私有的类成员 则只能被其定义所在的类访问
位置 private protected public
本类内 Y Y Y
子类内 N Y Y
外部 N N Y
能否重新定义 N Y Y
属性的访问控制
类属性必须定义为公有,受保护,私有之一。
如果用 var 定义,则被视为公有
方法的访问控制
类中的方法可以被定义为公有,私有或受保护。
如果没有设置这些关键字,则该方法默认为公有

Example #1 属性声明

<?php
    /**
     * Define MyClass
     */
    class MyClass
    {
        public $public = 'Public';
        protected $protected = 'Protected';
        private $private = 'Private';

        function printHello()
        {
            echo $this->public;
            echo $this->protected;
            echo $this->private;
        }
    }

    $obj = new MyClass();
    echo $obj->public; // 这行能被正常执行
    echo $obj->protected; // 这行会产生一个致命错误
    echo $obj->private; // 这行也会产生一个致命错误
    $obj->printHello(); // 输出 Public、Protected 和 Private


    /**
     * Define MyClass2
     */
    class MyClass2 extends MyClass
    {
        // 可以对 public 和 protected 进行重定义,但 private 而不能
        protected $protected = 'Protected2';

        function printHello()
        {
            echo $this->public;
            echo $this->protected;
            echo $this->private;
        }
    }

    $obj2 = new MyClass2();
    echo $obj2->public; // 这行能被正常执行
    echo $obj2->private; // 未定义 private
    echo $obj2->protected; // 这行会产生一个致命错误
    $obj2->printHello(); // 输出 Public、Protected2 和 Undefined

?>

猜你喜欢

转载自blog.csdn.net/qq_16142851/article/details/80296730