在类中获得当前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 {}

再补充一点,如果需要用静态方法获得class名,请等待php 5.3,见
http://cvs.php.net/viewvc.cgi/ZendEngine2/tests/lsb_004.phpt?revision=1.1.2.2&pathrev=PHP_5_3

作者: 发表于June 13, 2008 at 9:51 am

版权信息: 可以任意转载, 转载时请务必以超链接形式标明文章原始出处作者信息及此声明

Tags:

2 条评论 »

  1. 暮色今晨 于 2008-06-29 @ 11:04:55 留言

    不work 是可以理解的

  2. volcano 于 2008-06-29 @ 11:31:19 留言

    等php 5.3出来,问题就解决了

RSS 为此帖反馈评论

留条评论