静态方法和继承中的get_class (php)

2022-08-30 22:04:06

我们有一个代码

class ParentClass {
  public static function getName() {
    return get_class(self);
  }
}

class ChildClass extends ParentClass {
}

echo ParentClass::getName(); # => 'ParentClass'
echo ChildClass::getName(); # => 'ParentClass'

如果我使用get_class($this),则结果相同。也适用于自我::$this,静态::$this等

有什么方法可以获得子类名,而无需为此向子类添加方法?


答案 1

您必须使用get_called_class,这会延迟绑定。虽然只从 PHP 5.3 开始可用。


答案 2

从 PHP 5.5 开始,我们可以使用 :static::classget_called_class

class ParentClass {
  public static function getName() {
    return static::class;
  }
}

class ChildClass extends ParentClass {
}

echo ParentClass::getName(); # => 'ParentClass'
echo ChildClass::getName(); # => 'ChildClass'

推荐