正在编写一些 PHP 代码。经过调试,我将我的优秀行为减少到以下代码:
trait T1 {
function a1() { return $this->var; }
}
trait T2 {
use T1;
function a2() { return T1::a1(); }
}
class A {
use T2;
protected $var = 3;
}
$a = new A;
echo $a->a2();
只要A类中的$var被定义为public,这段代码就能正常工作;但是我想将其定义为protected(只是为了美观),却遇到了一个错误 Fatal error: Cannot access protected property B::$var in ... on line 5
为什么会出现这种情况?T1::a1是否会进行作用域更改以使其“在类外”?
T2
中,如果您在a2()
中返回$this->a1();
,结果是否相同? - Rudievar
,或者对a1()
的静态调用。使用var
作为属性名称也可以:http://3v4l.org/TNcVA - Rudie