免責事項
これは次のholivarのトピックではないことを事前に警告したいと思います。 しかし、これはこの言語が非常に広く、おそらく習慣から外れているからです。
PHP6を楽しみにしています:)
その間、厳しく判断せず、私のカルマを負けないように急がないでください-これが私の最初のhabratopikです
実際に問題
タスクはごく普通のことでした- シングルトンパターンを使用する必要がありました
多数のクラス用。 クラスごとに個別にこれを行う理由はなく、継承があるのはなぜかということは明らかです!
数分-そして出来事-独創的なことはすべて簡単です:
クラスstatic_base { static $ instance = null; 静的関数インスタンス(){ if(!self :: $ instance) self :: $ instance = new self(); return self :: $インスタンス; } }; クラスstatic_Aはstatic_base {}を拡張します。 クラスstatic_Bはstatic_baseを拡張します{}; static_A ::インスタンス(); static_B ::インスタンス();
しかし、そこにありました! これがPHP5.2.4であることを忘れていました。 このコードの結果はどう思いますか? まったく推測することはできません-さらに、どちらの呼び出しも
static_base
クラスの同じオブジェクトを返します!
そして、その後の人々を信じて
判明したように、 PHPではコードの解析段階で
self
修飾子が置換されるため、
static_A::instance()
と
static_base::instance()
呼び出しに違いはありません。
これは、
self
と一緒に
static
修飾子を導入することにより、PHP5.3で修正されたのは良いことです。