从扩展 PHP 类静态调用中获取类名
在面向对象编程中,类经常扩展基类来继承和扩展其功能。常见场景涉及需要从扩展类中的静态方法调用获取类名,尽管 CLASS 始终返回定义类的名称。
问题:父静态方法中类名不可访问
考虑一个有两个类的场景,Action和MyAction,其中 MyAction 扩展了 Action。 Action 定义了一个静态方法 n(),该方法无法通过父静态方法中的 CLASS 常量访问,从而导致 CLASS无论调用如何,值都设置为“操作”
解决方案:
1.后期静态绑定 (PHP 5.3 ):
后期静态绑定允许您在运行时而不是在定义方法时确定静态方法调用的目标类。这是使用 get_used_class() 函数实现的,该函数返回调用静态方法的类的名称。
例如:
class Action {
public static function n() {
return get_called_class();
}
}
class MyAction extends Action {
}
echo MyAction::n(); // Outputs "MyAction"
2.使用 get_class($this) (仅限非静态方法):
如果相关方法不是静态的,则可以使用 get_class($this) 获取类调用方法的名称。
例如:
class Action {
public function n() {
echo get_class($this);
}
}
class MyAction extends Action {
}
$foo = new MyAction;
$foo->n(); // Outputs "MyAction"
结论:
后期静态绑定和 get_class($this) 都提供了从静态方法调用中检索类名的解决方案扩展课。后期静态绑定更适合静态方法,而 get_class($this) 对于非静态方法很有用。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3