Может ли кто-нибудь объяснить, почему функция get_class
возвращает разные значения ниже? В частности, что он должен делать, когда он вызывается в базовом классе и когда он вызывается в производном классе?
abstract class bar { public function __construct() { var_dump(get_class($this)); //prints 'foo' var_dump(get_class()); // prints 'bar' } } class foo extends bar { } new foo;
Это довольно хорошо объяснено в документации , но вот оно:
get_class($instance)
возвращает класс $instance
экземпляра $instance
, независимо от того, где вы его вызываете; get_class($this)
ведет себя одинаково, возвращая класс $this
.
get_class()
возвращает класс, в котором метод, вызывающий его, определяется , поэтому он возвращает bar
в вашем примере, поскольку именно здесь определен __construct()
(даже если вы вызываете его через наследование).