public(公有),protected(受保护)或 private(私有) ,这是php面对对象经常也用写到的。
如果不写,那默认是public

被定义为公有的类成员可以在任何地方被访问。被定义为受保护的类成员则可以被其自身以及其子类和父类访问。被定义为私有的类成员则只能被其定义所在的类访问。

有点东西第一点

注意protected和private 访问的地方都是类里!类!类!

你会看到这样的实例

**
 * 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

有点东西2

private 而不能在类外改变,因为不能在对象输出,跟上面有点重复?不
这就跟 python 的 self.__xx 这样的私有变量一样,无法直接重定义,

但要去修改 private,跟 python 一样,需要另外写一个方法,直接通过类去改变,而不是对象

<?php
class Test
{
    private $foo;

    public function __construct($foo)
    {
        $this->foo = $foo;
    }

    private function bar()
    {
        echo 'Accessed the private method.';
    }

    public function baz(Test $other)
    {
        // We can change the private property:
        $other->foo = 'hello';
        var_dump($other->foo);

        // We can also call the private method:
        $other->bar();
    }
}

$test = new Test('test');

$test->baz(new Test('other2'));
?>
string(5) "hello"
Accessed the private method.

baz(Test $other) Test是类,这里相当于声明Test类型的变量,作用跟stringint一样,
这样后效果是传入的参数量是一个对象,并且是跟test同一个类,这样可以改这个类的对象的任何值,无视 权限
同时$test->baz(new Test('other2'));也可以看成,这个括号里的是类
这叫做类型约束
当然了,你还可以继续搜索,有其它方法去获取和改变私有变量

版权属于:染念
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2021年04月29日 09:06
0
发表评论


180 文章数
673 评论量
4 分类数
184 页面数
已在风雨中度过 7年80天14小时6分
目录
来自 《php的访问控制,有点东西》
© 2024 染念Blog
浙ICP备19020194号-1
暗黑模式
暗黑模式
评论
返回顶部
© 2024 染念Blog
浙ICP备19020194号-1
暗黑模式
暗黑模式
评论
返回顶部