You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否存在不使用Reflection获取不含命名空间类名的简便方法?

不用Reflection获取不带命名空间的类名的简便方法

当然有啦!不用Reflection也能轻松拿到不带命名空间的类名,给你分享几个实用的方法,直接就能用到你的代码里:

方法一:原生PHP字符串处理(通用所有PHP项目)

这是最稳妥的原生方案,不需要依赖任何框架组件:

用explode()分割命名空间

在你的process()方法里可以这么写:

public function process() {
    $fullClassName = get_class($this);
    $shortClassName = end(explode('\\', $fullClassName));
    echo $shortClassName; // 输出 SiteCancelled
}

原理是把完整类名按反斜杠\\分割成数组,然后取最后一个元素就是不带命名空间的类名。

用strrpos()+substr()截取

如果担心explode()处理超长类名的性能(其实日常场景几乎可以忽略),也可以用字符串截取的方式:

public function process() {
    $fullClassName = get_class($this);
    $shortClassName = substr($fullClassName, strrpos($fullClassName, '\\') + 1);
    echo $shortClassName; // 输出 SiteCancelled
}

strrpos()找到最后一个反斜杠的位置,然后从这个位置的下一位开始截取字符串,得到的就是类名。

方法二:Symfony框架专属快捷方法(适合你的项目)

看你的类命名空间是CRMPiccoBundle,应该是Symfony项目。Symfony提供了现成的工具方法可以直接用:

use Symfony\Component\HttpKernel\Kernel;

public function process() {
    $shortClassName = Kernel::classBasename(get_class($this));
    echo $shortClassName; // 输出 SiteCancelled
}

这个方法底层其实也是做了字符串处理,但框架已经帮你封装好了,直接调用更省心。


内容的提问来源于stack exchange,提问作者crmpicco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:11:13