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"
以上代码应该适用于所有版本(自 5.0.4 起)。
也许:
public function getName(){get_class($this);}
不过还没有测试过。
我有一个摘要 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"
以上代码应该适用于所有版本(自 5.0.4 起)。
也许:
public function getName(){get_class($this);}
不过还没有测试过。