假设我有以下内容:
class Foo
{
public $name;
public __construct()
{
$this->name = __CLASS__;
}
}
class Bar extends Foo
{
}
class FooBar extends Foo
{
}
$bar = new Bar();
echo $bar->name; // will output 'Foo', but I want 'Bar'
$foobar = new FooBar();
echo $foobar->name; // will output 'Foo', but I want 'FooBar'
有没有办法获取构造类的名称,而无需在扩展类中设置名称,例如在Foo类中设置名称?
注意:我有很多来自Foo的分类,在每个派生类中设置名称会有很多编码。
答案 0 :(得分:8)
public function __construct() {
$this->name = get_class($this);
}
答案 1 :(得分:3)
这很简单:只需使用get_called_class
:
$this->name = get_called_class();
这是PHP 5.3中引入的后期静态绑定功能的一部分。它指的是被调用的类,而不是定义方法的类。
答案 2 :(得分:0)
在php函数中有一个构建来获取类名get_class()
$fooBar = new FooBar();
echo get_class($fooBar); //will output FooBar