PHP中如何获得当前类的名称,而实例化后获取子类的名称

class all{ function all() { return __CLASS__; }} class my extends all{ }print my::all(); 这样获得的是父类的名称,我想获得 my ,请问用什么函数啊?

通过 get_declared_classes 获取所有的类,
然后循环这个array,再通过 instance_of 检测是否是你指定类的子类,然后push到一个数组中.
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-08
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 {}
第2个回答  推荐于2017-12-16
这是php静态数据过早绑定的问题(即子类的all方法是从父类中继承过来的,__CLASS__常量过早的绑定成了父类名),解决这个问题:方法一:class all{ function all() { return __CLASS__; }} class my extends all{ function all() { return __CLASS__; }}//子类定义同名的方法(这其实就是覆盖了父类的方法,让__CLASS__绑定为自己的类名)echo my::all();
方法二:class all{ function all() { return get_class($this); }} class my extends all{}$my = new my();//非静态调用是不存在过早绑定的情况的。echo $my->all();
这个可以看看php5.3.0版本之后的静态迟绑定相关信息(static关键字)本回答被网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网