PHP: get_called_class() vs get_class ($ this)
В 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)
?
Ответы
Ответ 1
В этом случае нет разницы, потому что $this
всегда указывает на правильный экземпляр, из которого имя класса разрешено с помощью get_class()
.
Функция get_called_class()
предназначена для статических методов. Когда статические методы переопределены, эта функция возвращает имя класса, которое предоставляет контекст для текущего метода, который вызывается.
Ответ 2
Для более быстрой альтернативы get_called_class()
в PHP >= 5.5 используйте static::class
. Он работает, чтобы получить класс верхнего уровня для вызовов статических методов, а также для унаследованных методов.
Ответ 3
Не в этом случае... если дамп был статическим методом и исключил параметр $this
, то get_class вернул бы "A" в обоих случаях, и get_called_class вернул бы "B", когда вы сделали B::dump();
Ответ 4
В этом случае нет разницы, оба возвращают имя класса, но get_called _class имеет Late Static Binding
Ответ 5
Ответ в этом конкретном случае: НЕТ.
Нет никакой разницы.
Ссылка: (http://php.net/manual/en/function.get-class.php)
строка get_class ([object $object = NULL])
...
Если объект отсутствует внутри класса, возвращается имя этого класса.