PHP の遅延静的バインディング
Nov 11, 2016 pm 01:13 PM最近、あるプロジェクトでこのようなケースに遭遇しました。パフォーマンスを高めるには、すべての Model クラスがシングルトンである必要があると感じました。すべてのモデルが統合された親クラス BaseModel を継承するため、BaseModel にシングルトンを制御するコードを追加します。
Javaコード
/*基类*/ class BaseModel { private static $instance = null; public static function instance() { if (empty(self::$instance)) { self::$instance = new self(); } return self::$instance; } }
ログイン後にコピー
そして各論理サブクラスモデル
Javaコード
/*商品类*/ 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は
Javaコード
object(BaseModel)#1 (0) { }
ログイン後にコピー
不要なGoodModel
これは自己紹介が必要です
self::呼び出された変数はこのクラスのみであり、クラスが継承されて変数がオーバーライドされた場合でも、親クラスのself::呼び出された変数は親クラスの変数値を出力し、出力されません。上書きされた値
したがって、静的バインディングを遅らせるには static キーワードを使用する必要があります。 static はサブクラスを表します
コードは次のとおりです
Java コード
/*base class*/
class BaseModel { private static $instance = null; public static function instance() { if (empty(self::$instance)) { self::$instance = new static(); } return self::$instance; } }
ログイン後にコピー
今回は
Java コード
object(GoodModel)#1 (0) { }
ログイン後にコピー
実は、get_called_class 関数を使用して上記の問題を解決することもできます。 コードは次のとおりです
Java コード
class BaseModel { private static $instance = null; public static function instance() { if (empty(self::$instance)) { $className = get_called_class(); self::$instance = new $className(); } return self::$instance; } }
ログイン後にコピー
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

人気の記事
スプリットフィクションを打ち負かすのにどれくらい時間がかかりますか?
3週間前
By DDD
レポ:チームメイトを復活させる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
ハローキティアイランドアドベンチャー:巨大な種を手に入れる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
2つのポイント博物館:すべての展示とそれらを見つける場所
3週間前
By 尊渡假赌尊渡假赌尊渡假赌

人気の記事
スプリットフィクションを打ち負かすのにどれくらい時間がかかりますか?
3週間前
By DDD
レポ:チームメイトを復活させる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
ハローキティアイランドアドベンチャー:巨大な種を手に入れる方法
3週間前
By 尊渡假赌尊渡假赌尊渡假赌
2つのポイント博物館:すべての展示とそれらを見つける場所
3週間前
By 尊渡假赌尊渡假赌尊渡假赌

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック
Gmailメールのログイン入り口はどこですか?
7126
9


Java チュートリアル
1534
14


Laravel チュートリアル
1256
25


PHP チュートリアル
1205
29


CakePHP チュートリアル
1153
46



LaravelのバックエンドでReactアプリを構築する:パート2、React
