gpt4 book ai didi

php - 无法访问特征中的 protected 属性

转载 作者:可可西里 更新时间:2023-11-01 00:32:03 25 4
gpt4 key购买 nike

正在编写一些 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,这段代码就可以工作;因为我想保护它(只是为了让它更好),我偶然发现了一个错误 Fatal error: Cannot access protected property B::$var in ... on line 5

为什么在这种情况下会发生这种情况? T1::a1 是否将范围更改为某种“类外”?

最佳答案

您正在直接调用特征的静态方法。从来都不是一个好主意。

除了类中的 use 语句之外,你不应该在任何地方使用特征名称。

如果您将 a1() 作为 $this 的方法调用,它工作正常:http://3v4l.org/TNcVA

trait T1 {
function a1() {
return $this->var;
}
}
trait T2 {
use T1;
function a2() {
return $this->a1();
}
}
class A {
use T2;
protected $var = 3;
}

$a = new A;
echo $a->a2();

关于php - 无法访问特征中的 protected 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26639291/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com