我有一个抽象类和一个扩展类:
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中的抽象父类的上下文中动态获取扩展类名吗?
答案 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"
以上代码适用于所有版本(自5.0.4起)。
答案 1 :(得分:2)
也许:
public function getName(){get_class($this);}
虽然没有测试过。