获取类名减去命名空间而不使用Reflection

时间:2018-03-19 08:29:15

标签: php class oop reflection php-7

有没有一种简单的方法来获取没有名称空间的没有使用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()
    }
}

4 个答案:

答案 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);
}