从扩展 PHP 类静态调用中获取类名
在面向对象编程中,类经常扩展基类来继承和扩展其功能。常见场景涉及需要从扩展类中的静态方法调用获取类名称,尽管 CLASS 始终返回定义类的名称。
问题:父静态方法中类名称不可访问
考虑一个有两个类的场景,Action 和 MyAction,其中 MyAction扩展动作。 Action 定义了一个静态方法 n(),它无法通过父静态方法中的 CLASS 常量访问,从而产生 CLASS无论调用类如何,值都设置为“Action”。
解决方案:
1.后期静态绑定 (PHP 5.3 ):
后期静态绑定允许您在运行时而不是在定义方法时确定静态方法调用的目标类。这是使用 get_used_class() 函数实现的,该函数返回调用静态方法的类的名称。
例如:
<code class="php">class Action { public static function n() { return get_called_class(); } } class MyAction extends Action { } echo MyAction::n(); // Outputs "MyAction"</code>
2。使用 get_class($this) (仅限非静态方法):
如果相关方法不是静态的,您可以使用 get_class($this) 获取类调用方法的名称。
例如:
<code class="php">class Action { public function n() { echo get_class($this); } } class MyAction extends Action { } $foo = new MyAction; $foo->n(); // Outputs "MyAction"</code>
结论:
后期静态绑定和 get_class($this)提供从扩展类中的静态方法调用检索类名的解决方案。后期静态绑定更适合静态方法,而 get_class($this) 对于非静态方法很有用。
以上是如何在静态方法调用中从扩展 PHP 类获取类名?的详细内容。更多信息请关注PHP中文网其他相关文章!