【发布时间】:2020-09-29 19:28:30
【问题描述】:
我已经编写了许多类,并且最近认为我可以在一个公共父类中定义一个属性并让它对所有子类可见,但显然我似乎遇到了某种形式的范围问题并且不能确定我哪里出错了。
所以,我的课程如下;
class AppInit {
protected $var;
}
class Jobs extends AppInit {
public function setVar($val) {
$this->var = $val;
}
}
class Items extends AppInit {
public function showVar() {
echo $this->var;
}
}
$obj1 = new Jobs();
$obj1->setVar(12345);
$obj2 = new Items();
$obj2->showVar();
# Nothing will print because AppInit->var is only defined within the instance that initiated it.
我遇到的问题是 $obj2 似乎无法看到其他类实例在父级别设置的受保护属性 $var。如何使 AppInit->var 在作为继承的一部分创建的所有 AppInit 实例中可见?
谢谢各位!
【问题讨论】:
-
但它们是不同的实例。试图确保我没有遗漏任何东西。你想
clone可能吗? -
你没有设置在
$obj2,你设置在$obj1。 -
$obj2instances$var从未设置,因此为 NULL。可见度没有问题。 -
这就是问题所在。我想在单个实例中初始化它并让它在任何其他实例中可用。这甚至可能吗?
-
@Skittles 是的,将其设为 static,以便所有类都可以访问它。