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

PHP: dynamically get name of a class that extends the current class

我有一个摘要 class 和一个扩展 class:

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

class MyExtends extends MyAbstract {}

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

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

这在 PHP 5.6+ (demo) 上运行良好,但我正在处理的项目仅限于 PHP 5.3,我无法改变它。在该版本上,抛出解析错误:

Parse error: syntax error, unexpected T_CLASS, expecting T_STRING or T_VARIABLE or '$'

所以我修改函数为:

public function getName(){echo __CLASS__;}

当然,这只是呼应了父名称——MyAbstract,所以它不起作用。我唯一想到的就是在每个扩展 class 中用一个新的实现来覆盖 getName(),但这并不能很好地扩展:继承的全部要点是将公共代码库集中在父级中(当然,真正的功能不是一行)。

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

您可以使用 get_class 获取 class 的名称:

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

class MyExtends extends MyAbstract 
{
}

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

demo: https://ideone.com/TtMtZ7

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

也许:

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

不过还没有测试过。