我有一个单实例父类,它包含“本地全局属性”,每个子类都应该有权访问(也可以在更改时)
我可以想到两种方法来确保来自实例化父级的子级继承父级值:
1)使用静态变量
class p
{
public static $var = 0;
}
class c extends p
{
function foo()
{
echo parent::$var;
}
}
$p = new p;
$c = new c;
$c->foo(); //echoes 0
p::$var = 2;
$c->foo(); //echoes 2
2)使用传递的对象
class p
{
public $var = 0;
}
class c extends p
{
function update_var(p $p)
{
$this->var = $p->var;
}
function foo()
{
echo $this->var;
}
}
$p = new p;
$c = new c;
$c->foo(); //echoes 0
$p->var = 2;
$c->update_var($p);
$c->foo(); //echoes 2
在我看来,静态解决方案是迄今为止最优雅的解决方案,但可能存在一些我没有看到的缺点。您认为哪种解决方案是最好的,还是有第三种更好的选择?
(另请注意,在此示例中 $var 是公开的,以使此示例更易于说明,但最终会受到保护)