PHP:动态获取扩展当前类的类的名称

时间:2017-09-01 14:29:50

标签: php php-5.3

我有一个抽象类和一个扩展类:

abstract class MyAbstract {
    public function getName(){echo static::class;}
}

class MyExtends extends MyAbstract {}

我希望在调用getName()时动态获取任何扩展类的名称:

$c = new MyExtends();
echo $c->getName(); // expect: "MyExtends"

这适用于PHP 5.6+(demo),但我正在研究的项目仅限于PHP 5.3,我无权改变它。在该版本上,抛出了一个解析错误:

  

解析错误:语法错误,意外T_CLASS,期待T_STRING或T_VARIABLE或' $'

所以我将函数修改为:

public function getName(){echo __CLASS__;}

当然,这只是回响了父名 - MyAbstract,所以它不起作用。我唯一想到的是在每个扩展类中使用新实现覆盖getName(),但这并不能很好地扩展:继承的整个要点是将公共代码库集中在父级中(当然,真正的功能不是单线)。

我知道如何从PHP 5.3中的抽象父类的上下文中动态获取扩展类名吗?

2 个答案:

答案 0 :(得分:2)

您可以使用get_class获取课程名称:

<?php
abstract class MyAbstract
{
    public function getName()
    {
        echo get_class($this);
    }
}

class MyExtends extends MyAbstract 
{
}

$c = new MyExtends();
echo $c->getName(); // expect: "MyExtends"
  

演示: https://ideone.com/TtMtZ7

以上代码适用于所有版本(自5.0.4起)。

答案 1 :(得分:2)

也许:

public function getName(){get_class($this);}

虽然没有测试过。