PHP中如何获得当前类的名称,而实例化后获取子类的名称
classall{functionall(){return__CLASS__;}}classmyextendsall{}printmy::all();这样获得的是父类的名...
class all{ function all() { return __CLASS__; }} class my extends all{ }print my::all(); 这样获得的是父类的名称,我想获得 my ,请问用什么函数啊?
展开
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 {}
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 {}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐于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关键字)
方法二:class all{ function all() { return get_class($this); }} class my extends all{}$my = new my();//非静态调用是不存在过早绑定的情况的。echo $my->all();
这个可以看看php5.3.0版本之后的静态迟绑定相关信息(static关键字)
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询