有没有一种简单的方法来获取没有名称空间的没有使用Reflection的类名?
这是我的课程,当我致电get_class()
时,我得到CRMPiccoBundle\Services\RFC\Webhook\SiteCancelled
namespace CRMPiccoBundle\Services\RFC\Webhook;
class SiteCancelled extends Base implements Interface
{
public function process() {
// echo get_class()
}
}
答案 0 :(得分:2)
或者简单地从class_name
爆炸并获得最后一个元素:
$class_parts = explode('\\', get_class());
echo end($class_parts);
或者只是从get_class
的输出中删除命名空间:
echo str_replace(__NAMESPACE__ . '\\', '', get_class());
使用或不使用命名空间。
等等。
答案 1 :(得分:0)
使用字符串操作的方法很多......
如果您确定您的类名包含名称空间:
$c = 'CRMPiccoBundle\Services\RFC\Webhook';
echo ltrim(strrchr($c, '\\'), '\\');
echo substr($c, strrpos($c, '\\') + 1);
如果您不确定该类是否包含命名空间:
echo ltrim(substr($c, strrpos($c, '\\')), '\\');
preg_match('/[^\\\\]+$/', $c, $m)
echo $m[0];
可能还有许多关于该主题的其他变体......
答案 2 :(得分:0)
使用class_basename()
函数获取没有名称空间的类名
<?php
echo class_basename(__CLASS__);
答案 3 :(得分:-1)
这是我想出的最快的方法,似乎适用于所有情况:
function toUqcn(string $fqcn) {
return substr($fqcn, (strrpos($fqcn, '\\') ?: -1) + 1);
}