ホームページ > バックエンド開発 > PHPチュートリアル > PHP は静的バインディングを延期します

PHP は静的バインディングを延期します

WBOY
リリース: 2016-06-13 12:13:28
オリジナル
786 人が閲覧しました

PHP の遅延静的バインディング
最近のプロジェクトでそのようなケースに遭遇しましたが、パフォーマンスを上げるためにはすべての Model クラスがシングルトンである必要があると感じました。すべてのモデルが統合された親クラスの BaseModel を継承するため、コードにコントロール シングルトンが追加されます。簡単なデモンストレーションは次のとおりです:

/*基类*/class BaseModel{    private static $instance = null;    public static function instance()    {        if (empty(self::$instance)) {            self::$instance = new self();        }        return self::$instance;    }}
ログイン後にコピー

、そして各論理サブクラス Model
/*商品类*/class GoodModel extends BaseModel{    public function getInfoById($goodId){        return array(            'id'=>$goodId,            'name'=>'小苹果',            'logo'=>'http://t3.qlogo.cn/mbloghead/65518bb9e5287fcd5864/180'        );    }}################################################################$good = GoodModel::instance();var_dump($good);
ログイン後にコピー

この種類の $good は
object(BaseModel)#1 (0) {}
ログイン後にコピー

Unnecessary GoodModel


これは self

self::呼び出される変数はクラスの変数のみです。クラスが継承されていても、変数はオーバーライドされ、関数 self:親クラスで呼び出された変数は、上書きされた値ではなく、親クラスの変数値を出力します。 したがって、静的バインディングを遅らせるには、static キーワードを使用する必要があります。サブクラス
コードは次のとおりです


このときの $good は
/*基类*/class BaseModel{    private static $instance = null;    public static function instance()    {        if (empty(self::$instance)) {            self::$instance = new static();        }        return self::$instance;    }}
ログイン後にコピー


実際には get_called_class 関数を使用して解決することもできます上記の問題のコードは次のとおりです
object(GoodModel)#1 (0) {}
ログイン後にコピー



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