2013-05-13 8 views
16

В PHP какая разница между 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 вернется «а» в обоих случаях и get_called_class вернется «B», когда вы сделали B::dump();

0

ответ, в данном случае, является: NO.

Нет никакой разницы.


Ссылка: (http://php.net/manual/en/function.get-class.php)

строка get_class ([объект объект $ = NULL])

...

Если объект опущен, когда внутри класс, возвращается имя этого класса.

11

Для более быстрой альтернативы get_called_class() в PHP> = 5.5 используйте static::class. Он работает, чтобы получить класс верхнего уровня для вызовов статических методов, а также для унаследованных методов.

Смежные вопросы