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

classall{functionall(){return__CLASS__;}}classmyextendsall{}printmy::all();这样获得的是父类的名... class all{ function all() { return __CLASS__; }} class my extends all{ }print my::all(); 这样获得的是父类的名称,我想获得 my ,请问用什么函数啊? 展开
 我来答
du瓶邪
推荐于2016-02-22 · TA获得超过2.4万个赞
知道大有可为答主
回答量:1.7万
采纳率:100%
帮助的人:2978万
展开全部
通过 get_declared_classes 获取所有的类,
然后循环这个array,再通过 instance_of 检测是否是你指定类的子类,然后push到一个数组中.
匿名用户
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 {}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于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关键字)
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式