php面向对象的可见性

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (47)

关于PHP中OO visibilty的这一段,我有点困惑。如果有人能向我解释,我很好奇。例子很棒!我的大脑没有想清楚。

http://www.php.net/manual/en/language.oop5.visibility.php

第一段读到

可以通过在声明前加上关键字public,protected或private来定义属性或方法的可见性。声明为public的类成员可以随处访问。声明受保护的成员只能在类本身以及继承和父类中访问。声明为private的成员只能由定义该成员的类访问。

父类如何访问子类成员?

提问于
用户回答回答于

这就是原因:

class A {
    public function test() {
        $b = new B;
        echo $b->foo;
    }
}

class B extends A {
    protected $foo = 'bar';
}

$a = new A;
$a->test();
用户回答回答于

PHP是一种解释型语言。属性在运行时解析,而不是在编译阶段解析。访问属性时只检查访问修饰符。

如果您临时注入一个新的(未声明的)属性以使其变为公共属性,或者在继承的类中声明受保护的属性,则没有任何区别。

private真的只会影响外部的可访问性。->name无论如何,运行时的解析都可以正常工作。如果为当前对象实例类创建了属性声明,那么PHP运行时就不会成功。(与私人声明不同。)

扫码关注云+社区

领取腾讯云代金券