class B extends A
{
public static function _test(){
return 'B_result';
}
}
class C extends A
{
public static function _test(){
return 'C_result';
}
}
class A
{
public static function test(){
$result = static::_test();
echo get_called_class();
echo $result;
}
}
$sClass = 'C';
$sClass::test();
output:C
$result:C_result
雖然看似簡單,但是如果_test()算出來的結果不是那麼的規律,而且$sClass這邊又不是寫的這麼直觀。可以用get_called_class()來找到A::test()的static::_test()是呼叫哪個Class的_test()
參考資料:
https://stackoverflow.com/questions/506705/how-can-i-get-the-classname-from-a-static-call-in-an-extended-php-class How can I get the classname from a static call in an extended PHP class?