PHP: get_called_class() vs get_class ($ this) - программирование
Подтвердить что ты не робот

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)?

4b9b3361

Ответ 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])

...

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