2013-05-13 7 views
16

get_called_class()get_class($this)の違いは何ですか?

例:

class A { 
    function dump() { 
     echo get_called_class(); 
     echo get_class($this); 
    } 
} 

class B extends A {} 

$A = new A(); 
$B = new B(); 

$A->dump(); // output is 'AA' 
$B->dump(); // output is 'BB' 

は、この場合の違いはありますか?

いつどちらを使用する必要がありますかget_called_class()またはget_class($this)

答えて

18

$thisは常にクラス名がget_class()を使用して解決され、そこから正しいインスタンスを指しているので違いは、ありません。

関数get_called_class()は、静的メソッドを対象としています。静的メソッドがオーバーライドされると、この関数は呼び出されている現在のメソッドのコンテキストを提供するクラス名を返します。

0

この例では差がない、両方のは、クラスの名前を返しますが、get_called _classは後期静的、この場合には

1

を未バインドが...ダンプは、静的な方法であったと$thisパラメータを排除した場合その後、get_classは両方のケースで「A」を返します、あなたは答えB::dump();

0

をしたときget_called_classが「B」を返します、この特定の場合には、次のとおりです。NO

違いはありません。


参考:http://php.net/manual/en/function.get-class.php

文字列get_class([オブジェクト$オブジェクト= NULL])

...

オブジェクトは時に内部に省略された場合そのクラスの名前が返されます。この場合

11

PHP> = 5.5の場合、get_called_class()のはるかに高速な代替手段として、static::classを使用してください。これは静的メソッド呼び出しと継承されたメソッドのトップレベルクラスを取得するために機能します。

関連する問題