PHP:动态得到扩展当前类
我有一个抽象类,延伸类的类名:PHP:动态得到扩展当前类
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,我没有杠杆来改变这种状况。在该版本中,一个解析错误被抛出:
Parse error: syntax error, unexpected T_CLASS, expecting T_STRING or T_VARIABLE or '$'
所以我修改的功能:
public function getName(){echo __CLASS__;}
当然,这只是呼应了父母的名字 - MyAbstract
,所以这是行不通的。我唯一想到的是在每个扩展类中用一个新的实现覆盖getName()
,但这并不能很好地扩展:整个继承点就是将通用代码集中在父类中(当然,实际功能不是一个班轮)。
任何想法如何从PHP 5.3中的抽象父类的上下文动态获取扩展类名?
您可以使用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以来)。
可能:
public function getName(){get_class($this);}
还没虽然进行了测试。
你的直觉是正确的。它的工作原理 – BeetleJuice
非常好。祝你好运 – ASOlivieri
谢谢。是的,它按预期工作。请添加一个链接到文档,以改善答案:http://php.net/manual/en/function.get-class.php – BeetleJuice
@BeetleJuice - 链接可用,但在德国:P - 改为英文。谢谢。 –
很酷的网站(ideone.com);我不知道这件事。 – BeetleJuice