2016-10-21 4 views
3

なぜinstanceofの呼び出しに時間がかかるのか分かりません。たとえば、次のようになぜinstanceof呼び出しの使用に時間がかかりますか?

if($this instanceof Player){ 
    // Lags the server. 
} 

が、私は選手クラスでこれを追加する場合:

public function isPlayer(){ 
    return true; 
} 

そして実行します。

if($this->isPlayer()){ 
    //Super fast. 
} 

それははるかに高速です。だから、私がするときif ($this instanceof Player)その時間中に実際に何をしているのですか?

+1

実際には、is_a関数よりも高速です。この興味深い質問を見てください:http://stackoverflow.com/questions/3017684/what-is-the-difference-between-is-a--instanceof – nanocv

+1

あなたの継承チェーンはどれくらい深く入れ子ですか?例えばもし '$ this'が20世代目のプレーヤー拡張であれば、チェーンをバックアップするのに時間がかかります。それが直接の '$ this players extends'世代の場合は –

+0

興味深いですが、私はis_a()メソッドを使用していません。私は単にすべてのエンティティクラスisPlayer()に関数を入れ、それが真または偽であれば値を返し、次にこの関数を使ってinstanceof演算子を避けることができます。 – Callerap

答えて

0

PHPはinstanceofチェックのために文字列比較を使用します。

非常に長いクラス名を使用したり、非常に頻繁に呼び出す場合は、大幅に減速する可能性があります。 Instanceofセクションのhttps://phpgoodness.wordpress.com/2010/07/23/some-php-performance-myths/を見てください。その違いを示すパフォーマンス比較があります。

関連する問題