获取构造类的类名

时间:2012-10-03 08:50:56

标签: php

  

可能重复:
  Get class name from extended class

假设我有以下内容:

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

3 个答案:

答案 0 :(得分:8)

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

http://php.net/get_class

答案 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