この記事ではPHPの後期静的バインディング関数を紹介します主にクラスを静的に呼び出す問題を解決するために使用されます。継承スコープで参照されます。
まず、次の例を見てみましょう:
コードをコピーします コードは次のとおりです:
クラス人
{
パブリック静的関数 status()
{
self::getStatus();
}
保護された静的関数 getStatus()
{
echo "人は生きています";
}
}
class Deceased は Person を拡張します
{
保護された静的関数 getStatus()
{
echo "人は亡くなっています";
}
}
死亡::status() //人は生きています
;
明らかに、結果は私たちが期待したものではありません。これは、self:: が実行中のクラスではなく、定義されているクラスに依存しているためです。この問題を解決するには、継承されたクラスの status() メソッドをオーバーライドすることができます。より良い解決策は、PHP 5.3 に遅延静的バインディングの機能を追加することです。
コードをコピーします コードは次のとおりです:
クラス人
{
パブリック静的関数 status()
{
static::getStatus();
}
保護された静的関数 getStatus()
{
echo "人は生きています";
}
}
class Deceased は Person を拡張します
{
保護された静的関数 getStatus()
{
echo "人は亡くなっています";
}
}
Deceased::status() //人は亡くなっています
;
static:: が現在のクラスを指していないことがわかります。実際、実行時に計算され、最終クラスのすべてのプロパティが強制的に取得されます。
そのため、今後は self:: を使用せず、static:::を使用することをお勧めします
。