我有一個抽象類,延伸類的類名: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中的抽象父類的上下文動態獲取擴展類名?
謝謝。是的,它按預期工作。請添加一個鏈接到文檔,以改善答案:http://php.net/manual/en/function.get-class.php – BeetleJuice
@BeetleJuice - 鏈接可用,但在德國:P - 改爲英文。謝謝。 –
很酷的網站(ideone.com);我不知道這件事。 – BeetleJuice