PHPが好きではない理由

免責事項


これは次の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で修正されたのは良いことです。


Source: https://habr.com/ru/post/J27549/


All Articles