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

クラス名get_class()を取得するための php 関数が組み込まれています。

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