「ローカルグローバルプロパティ」を保持する単一インスタンスの親クラスがあり、すべての子クラスがアクセスできる必要があります(変更された場合も)
インスタンス化された親からの子が親の値を確実に継承するようにする 2 つの方法を考えることができます。
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
私の意見では、静的ソリューションは最も洗練されたソリューションですが、私が見ていないいくつかの欠点があるかもしれません。どの解決策が最善だと思いますか、または 3 つ目のより良い選択肢はありますか?
(また、この例では、この例を説明しやすくするために $var が公開されていますが、最終的には保護されることに注意してください)