PHP在类中获得当前class名称

php 4.3以后新增了一个魔术常量__CLASS__,用来获得当前class名称。但是在下面的代码中,却不work。

class A {
 function showclass() {
     echo __CLASS__;
 }
}
class B extends A {}
 
A::showclass();
B::showclass();

这段代码会打出两个A,而不是预想中的AB。

下面这段代码,利用debug_backtrace来获得当前class名,可惜只能在php4上面work,到了php5以上,测试结果全部都是AA-___-

class A {
   function showclass() {
      $backtrace = debug_backtrace();
      echo $backtrace[0]['class'];
   }
}
 
class B extends A {}

补充一个可以在php4/php5下work的代码

class A {
 function showclass() {
    $backtrace = debug_backtrace();
    echo ((int)PHP_VERSION> 4) ?
        get_class($backtrace[0]['object']) : $backtrace[0]['class'];
 }
}
class B extends A {}

时间: 2024-09-19 09:28:52

PHP在类中获得当前class名称的相关文章

AS3类中读取FLA文件中元件的方法

example:类中代码:/*** ...* @author http://as63.net* @version 0.1*/ package {import flash.text.TextField; public class main {private var my_txt:TextField;public function main(_Str:TextField) {my_txt=_Str;my_txt.text="大家好";}}} FLA中代码: var my_main:main

Java中ResultSet数据自动填充到类中&类实例填充PreparedStatement

需求: (1)提取ResultSet中值到一个类中挺麻烦的,需要new一个变量,使用对应成员的Set方法赋值,能不能根据类的Class,直接提取出ResultSet中的数据,最后返回实例化的类? (2)可以用PreparedStatement预编译带变量的sql语句,在execute之前需要将变量值填充进去,一个一个设置太麻烦了,能不能提供一个类变量,使用类成员变量的值自动填充PreparedStatement? 这样的功能许多开源的框架可以实现,但是不想因为这么一点点的需求去学习那么庞大的一套

Groovy、Scala 和 Clojure 如何将行为融入到类中

Java 语言的设计有目的地进行了一定的删减,以避免前代产品中已发现的一些问题.例如,Java 语言的 设计人员感觉 C++ 中的多重继承性带来了太多复杂性,所以它们选择不包含该特性.事实上,他们在该语言 中很少构建扩展性选项,仅依靠单一继承和接口. 其他语言(包括 Java 下一代语言)存在巨大的扩 展潜力.在本期和接下来的两期文章中,我将探索扩展 Java 类而不涉及继承性的途径.在本文中,您会了解 如何向现有类添加方法,无论是直接还是通过语法糖 (syntactic sugar). 表达式

在派生类中对虚方法进行重载

先让我们回顾一下普通的方法重载.普通的方法重载指的是:类中两个以上的方法(包括隐藏的继承而来的方法),取的名字相同,只要使用的参数类型或者参数个数不同,编译器便知道在何种情况下应该调用哪个方法. 而对基类虚方法的重载是函数重载的另一种特殊形式.在派生类中重新定义此虚函数时,要求的是方法名称.返回值类型.参数表中的参数个数.类型.顺序都必须与基类中的虚函数完全一致.在派生类中声明对虚方法的重载,要求在声明中加上override关键字,而且不能有new,static或virtual修饰符. 还是让我

用java类中的映射获取变量名

在类中定义了一个属性abc,如何获取这个变量的abc的名字串呢?也就是说怎么知道 abc这个变量的名字是abc,这个问题比较的好玩. 这个是偶在一开发中遇到的一个比较有趣的问题,找 了半天的资料加下偶辛勤的思考 ,终于找到的解决方法.用反射--- java提供了很强大的反射机制,可以说比动态语言还动态.但是这个东东平时的应用 不是很多的说. 现提供一个可以动态获取对象中的变量的变量名称的bt方法: public class MyTools { public static void setAllC

java中为什么只进行一个初始化就会执行类中的函数

问题描述 java中为什么只进行一个初始化就会执行类中的函数 import java.awt.*;import javax.swing.*;import java.awt.event.*;public class E2 extends Frame{ class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent we) {System.exit(0); } } E2() { super(""

了解Groovy、Scala和Clojure如何将行为融入到Java类中

Java 语言的设计有目的地进行了一定的删减,以避免前代产品中已发现的一些问题.例如,Java 语言的设计人员感觉 C++++ 中的多重继承性带来了太多复杂性,所以它们选择不包含该特性.事实上,他们在该语言中很少构建扩展性选项,仅依靠单一继承和接口. 其他语言(包括 Java 下一代语言)存在巨大的扩展潜力.在本期和接下来的两期文章中,我将探索扩展 Java 类而不涉及继承性的途径.在本文中,您会了解如何向现有类添加方法,无论是直接还是通过语法糖 (syntactic sugar). 表达式问题

vb6实体类-Visual Basic 6.0精简版,如何在实体类中定义类属性?

问题描述 Visual Basic 6.0精简版,如何在实体类中定义类属性? 我想在类中定义类属性 玩家类代码 '玩家类 '名称Private Name As String'性别Private Sex As SexEnum'级别Private Level As Integer'当前级别分数Private LevelScore As Integer'总分Private SumScore As Integer'境界Private PlayerRealm As Realm'豆豆虫Private Pla

如何动态创建类中的变量

问题描述 类结构如下:publicclassmyclass{publicstringa{get;set;}publicstringb{get;set;}publicstringc{get;set;}publicstringd{get;set;}publicstaticIList<myclass>myIlist(stringarray)//array传值:b,c{string[]arr=array.Splist(newchar[]{','})IList<myclass>bk=newL