php

php中的public, private 、 protected

2023-08-30

访问控制(可见性) 

对属性或方法的访问控制(PHP 7.1.0 以后支持常量),是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。被定义为公有的类成员可以在任何地方被访问。 被定义为受保护的类成员则可以被其自身以及其子类和父类访问。被定义为私有的类成员则只能被其定义所在的类访问。


属性的访问控制 

类属性可以定义为public, private 或者 protected。在没有任何访问控制关键字的情况下,属性声明为 public。


示例 #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 而不能

    public $public = 'Public2';

    protected $protected = 'Protected2';


    function printHello()

    {

        echo $this->public;

        echo $this->protected;

        echo $this->private;

    }

}


$obj2 = new MyClass2();

echo $obj2->public; // 这行能被正常执行

echo $obj2->protected; // 这行会产生一个致命错误

echo $obj2->private; // 未定义 private

$obj2->printHello(); // 输出 Public2、Protected2 和 Undefined


?>