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