5

可能重复:
从扩展类中获取类名

假设我有以下内容:

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 派生的类,在每个派生类中设置名称将是很多编码。

4

3 回答 3

8
public function __construct() {
    $this->name = get_class($this);
}

http://php.net/get_class

于 2012-10-03T08:55:37.620 回答
3

这很容易:只需使用get_called_class

$this->name = get_called_class();

这是 PHP 5.3 中引入的后期静态绑定特性的一部分。它指的是被调用的类,而不是定义方法的类。

于 2012-10-03T08:53:52.587 回答
0

有一个内置的 php 函数来获取类名get_class()

$fooBar = new FooBar();
echo get_class($fooBar); //will output FooBar
于 2012-10-03T08:53:45.517 回答