当前位置: 首页 > 面试题库 >

如何从扩展PHP类中的静态调用获取类名?

韩玉石
2023-03-14
问题内容

我有两节课:ActionMyAction。后者声明为:

class MyAction extends Action {/* some methods here */}

我需要的只是Action类中的方法(仅在其中,因为会有很多继承的类,而且我不想在所有这些类中都实现此方法),它将从静态调用返回类名。这是我在说的:

Class Action {
 function n(){/* something */}
}

当我称它为:

MyAction::n(); // it should return "MyAction"

但是父类中的每个声明只能访问父类__CLASS__变量,该变量的值为“ Action”。

有什么可行的方法吗?


问题答案:

__CLASS__总是返回使用该类的类的名称,因此使用静态方法并没有太大帮助。如果该方法不是静态的,则可以简单地使用get_class($
this)。例如

class Action {
    public function n(){
        echo get_class($this);
    }

}

class MyAction extends Action {

}

$foo=new MyAction;

$foo->n(); //displays 'MyAction'

后期静态绑定,在PHP 5.3+中可用

现在已经发布了PHP 5.3,您可以使用后期静态绑定了,它使您可以在运行时而不是在定义静态方法时为静态方法调用解析目标类。

虽然此功能未引入新的魔术常数来告诉您被调用的类名,但它确实提供了一个新函数get_drawn_class(),它可以告诉您调用了静态方法的类的名称。下面是一个示例:

Class Action {
    public static function n() {
        return get_called_class();
    }
}


class MyAction extends Action {

}


echo MyAction::n(); //displays MyAction


 类似资料:
  • 问题内容: 我有这个: 一个字符串变量,其中包含类名() 一个具有属性名称()的字符串变量 我想从该类中获取该属性,问题是该属性是静态的,我不知道该怎么做。 如果该属性不是静态的,则可能是: 如果属性是一个方法,我本可以使用call_user_function 但就我而言,我只是迷路了。但是,我希望这是可能的。有了PHP所具有的数千个功能,他最好为此也有所准备。也许我缺少什么? 谢谢! 编辑: 对

  • 问题内容: 我有一个正在开发的Android键盘应用程序,它可以输出简单的符号而不是语言,因此,我希望能够跟踪用户活动,因为其中不涉及任何敏感信息或单词。 问题是,Android的也 不会 延长,这是什么让你访问谷歌Analytics(分析)的Android SDK(可能用词错误,在这里,随时纠正我)。 我已经按照这里的指南开始使用,这是我用来获取对象的代码: 这对于跟踪我的应用程序的主要活动非常

  • 我有以下类(请注意,方法是静态的): 当我打电话的时候: 我想得到输出:

  • 问题内容: 如何从该类的静态方法获取该类的名称。例如 为了把它放在上下文中,我实际上想返回类名,作为异常中消息的一部分。 问题答案: 为了支持正确的重构(重命名类),则应使用以下任一方法: 或(感谢):

  • 本文向大家介绍php如何获取文件的扩展名,包括了php如何获取文件的扩展名的使用技巧和注意事项,需要的朋友参考一下 网上也有很多类似的方法,不过都存在这样那样的不严谨的问题,本文就不一一分析了,这里只给出最正确的利用php 获取文件扩展名(文件后缀名)的方法。 函数中用到了php内置函数pathinfo 这个函数,下面分析一下这个函数的意思和用法: 定义和用法 pathinfo() 函数以数组的形

  • 问题内容: 我有一个包含静态创建方法的类。 当我使用时,它可以被编译。但是当我使用时,它编译失败,如何指定泛型? 问题答案: 假设您询问有关在类型推断失败的情况下显式指定类型的信息,则可以使用(请注意,该类型在after之后而不是before之前)。