从PHP mannual第二段开始,它说:
static ::介绍其范围。
我相应地尝试了以下示例:
class Father {
public function test(){
echo static::$a;
}
}
class Son extends Father{
protected static $a='static forward scope';
public function test(){
parent::test();
}
}
$son = new Son();
$son->test(); // print "static forward scope"
它的工作原理如上所述。但是,以下示例将引发致命错误:
class Father {
public function test(){
echo static::$a;
}
}
class Son extends Father{
private static $a='static forward scope';
public function test(){
parent::test();
}
}
// print "Fatal erro: Cannot access private property Son::$a"
$son = new Son();
$son->test();
我的主要问题是如何在这里解释scope
这个词?如果static
将Son
的范围引入Father
,那么为什么私有变量对Father
仍然不可见?
variable
范围和visibility
范围有两个方面吗?如果这听起来很有趣,我是PHP的新手。
答案 0 :(得分:1)
这里有两件事:范围和可见性。两者一起决定您是否可以进入酒店。
正如您在第一次测试中发现的那样,后期静态绑定允许$a
类的范围中提供Father
。这仅仅意味着变量(不一定是它的价值)是已知的"到这堂课。
可见性决定特定类和实例是否可以访问范围中的变量。私有属性仅对定义它的类可见。在第二个示例中,$a
在private
内定义为Son
。无论其他类是否知道它存在,都无法在Son
之外访问。
static
使$a
成为Father
已知的属性,但该属性的可见性决定了是否可以访问其值。
作为进一步帮助理解它的测试,请尝试使用self
代替static
。您将收到$a
不属于Father
属性的其他错误。