PHPの遅延静的バインディングについて簡単に説明します

WBOY
リリース: 2016-07-29 09:04:41
オリジナル
879 人が閲覧しました

使用シナリオ

まず、次のコードを確認してください:

abstract class base {
  //do sth
}
class aClass extends base{
  public static function create(){
    return new aClass();
  } 
}
class bClass extends base{
  public static function create(){
    return new bClass();
  }
}
var_dump(aClass::create());
var_dump(bClass::create());
ログイン後にコピー

出力:

object(aClass)#1 (0) { } object(bClass)#1 (0) { }
ログイン後にコピー

上記の aClass と bClass は抽象クラス ベースから継承していますが、静的メソッド create() は両方のサブクラスに同時に実装されています。時間。 oop のアイデアに従って、この繰り返しコードは親クラス ベースに実装する必要があります。

改良されたコード

abstract class base {
  public static function create(){
    return new self();
  } 
}
class aClass extends base{
}
class bClass extends base{
}
var_dump(aClass::create());
var_dump(bClass::create());
ログイン後にコピー

現在のコードは、以前のアイデアと一致しているようです。 create() メソッドは親クラスで共有されています。実行して何が起こるか見てみましょう。

抽象クラス ベースをインスタンス化できません...

残念ながら、親クラスの self() は親クラス ベースに解析され、子から継承されないようです。親切。この問題を解決するために、php5.3 では遅延静的バインディングの概念が導入されました。

遅延静的バインディング

abstract class base {
  public static function create(){
    return new static();
  } 
}
class aClass extends base{
}
class bClass extends base{
}
var_dump(aClass::create());
var_dump(bClass::create());

ログイン後にコピー

このコードは前のコードとほぼ同じですが、違いは、self が親クラスではなくサブクラスに解決されることです。私が遭遇した問題は、PHP の遅延静的バインディングです。

最後に、コードを実行して、最終的に望ましい結果を取得します。

りー

上記では、内容の側面も含めて、PHP の遅延静的バインディングについての簡単な話を紹介しました。これが、PHP チュートリアルに興味のある友人に役立つことを願っています。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート