我有两个类:Action
和 MyAction
。后者声明为:
class MyAction extends Action {/* some methods here */}
我只需要Action
类中的方法(只在里面,因为继承的类会很多,我不想在所有的类中都实现这个方法),这将从静态调用返回类名。这就是我要说的:
Class Action {
function n(){/* something */}
}
当我调用它时:
MyAction::n(); // it should return "MyAction"
但父类中的每个声明只能访问父类__CLASS__
变量,该变量的值为“Action”。
有没有办法做到这一点?
最佳答案
__CLASS__
总是返回使用它的类的名称,所以它对静态方法没有多大帮助。如果方法不是静态的,你可以简单地使用 get_class ($这个)。例如
class Action {
public function n(){
echo get_class($this);
}
}
class MyAction extends Action {
}
$foo=new MyAction;
$foo->n(); //displays 'MyAction'
后期静态绑定(bind),在 PHP 5.3+ 中可用
现在 PHP 5.3 发布了,您可以使用 late static bindings ,它允许您在运行时而不是在定义静态方法调用时解析目标类。
虽然该功能没有引入新的魔术常量来告诉您被调用的类名,但它确实提供了一个新功能 get_called_class()它可以告诉您调用静态方法的类的名称。这是一个示例:
Class Action {
public static function n() {
return get_called_class();
}
}
class MyAction extends Action {
}
echo MyAction::n(); //displays MyAction
关于php - 如何从扩展 PHP 类中的静态调用中获取类名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/506705/