【发布时间】:2017-09-01 14:29:49
【问题描述】:
我有一个抽象类和一个扩展类:
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 中的抽象父类的上下文中动态获取扩展类名吗?
【问题讨论】: