この記事では、主に継承スコープ内で静的に呼び出されたクラスを参照する問題を解決するために使用される PHP 後期静的バインディング関数を紹介します。
まず次の例を見てください:
class Person { public static function status() { self::getStatus(); } protected static function getStatus() { echo "Person is alive"; } } class Deceased extends Person { protected static function getStatus() { echo "Person is deceased"; } } Deceased::status(); //Person is alive
明らかに、結果は私たちが期待したものではありません。これは、self:: が実行中のクラスではなく、定義されているクラスに依存しているためです。この問題を解決するには、継承されたクラスの status() メソッドをオーバーライドすることができます。より良い解決策は、PHP 5.3 に遅延静的バインディングの機能を追加することです。
class Person { public static function status() { static::getStatus(); } protected static function getStatus() { echo "Person is alive"; } } class Deceased extends Person { protected static function getStatus() { echo "Person is deceased"; } } Deceased::status(); //Person is deceased
static:: が現在のクラスを指していないことがわかります。実際、これは実行時に計算され、最終クラスのすべてのプロパティが強制的に取得されます。
そのため、将来的には self:: を使用せず、static:: を使用することをお勧めします
PHP オブジェクト指向の後期静的バインディング関数の導入に関連するその他の記事については、PHP を参照してください。中国語のサイトです!