Php 在不使用反射的情况下获取类名减去命名空间

Php 在不使用反射的情况下获取类名减去命名空间,php,class,oop,reflection,php-7,Php,Class,Oop,Reflection,Php 7,有没有一种简单的方法可以不使用名称空间而不使用反射来获取类名 这是我的类,当我调用get\u类时,我会得到CRMPiccoBundle\Services\RFC\Webhook\SiteCancelled 使用字符串操作有很多方法 如果确定类名包含命名空间: $c = 'CRMPiccoBundle\Services\RFC\Webhook'; echo ltrim(strrchr($c, '\\'), '\\'); echo substr($c, strrpos($c, '\\') + 1)

有没有一种简单的方法可以不使用名称空间而不使用反射来获取类名

这是我的类,当我调用get\u类时,我会得到CRMPiccoBundle\Services\RFC\Webhook\SiteCancelled


使用字符串操作有很多方法

如果确定类名包含命名空间:

$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];
如果不确定类是否包含命名空间,请执行以下操作:

$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];

可能还有很多关于这个主题的其他变体…

使用字符串操作有很多方法

如果确定类名包含命名空间:

$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];
如果不确定类是否包含命名空间,请执行以下操作:

$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];

可能还有很多关于这个主题的其他变体…

或者简单地分解class_name的返回并获取最后一个元素:

 $class_parts = explode('\\', get_class());
 echo end($class_parts);
或者简单地从get_类的输出中删除名称空间:

可以使用名称空间,也可以不使用名称空间


依此类推。

或者简单地分解class_name的返回并获取最后一个元素:

 $class_parts = explode('\\', get_class());
 echo end($class_parts);
或者简单地从get_类的输出中删除名称空间:

可以使用名称空间,也可以不使用名称空间

依此类推。

使用class\u basename函数获取不带命名空间的类名

<?php

echo class_basename(__CLASS__);
使用class_basename函数获取不带命名空间的类名

<?php

echo class_basename(__CLASS__);

这是我想出的最快的方法,似乎适用于所有情况:

function toUqcn(string $fqcn) {
   return substr($fqcn, (strrpos($fqcn, '\\') ?: -1) + 1);
}

这是我想出的最快的方法,似乎适用于所有情况:

function toUqcn(string $fqcn) {
   return substr($fqcn, (strrpos($fqcn, '\\') ?: -1) + 1);
}

你不想反思有什么特别的原因吗?除此之外,,如果您将类名作为字符串,则可以在其上使用PHP的字符串函数。使用类名创建类属性,并在getclass中使用itreplace\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?查找\的最后一个匹配项,并在其之后获取所有内容……我使用str\u replace查看注释和答案,但我完全希望PHP提供一种更干净的方法而不是依赖于字符串操作。有什么特殊的原因不需要反射吗?除此之外,,如果您将类名作为字符串,则可以在其上使用PHP的字符串函数。使用类名创建类属性,并在getclass中使用itreplace\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu?查找\的最后一个匹配项,并在其之后获取所有内容……我使用str\u replace查看注释和答案,但我完全希望PHP提供一种更干净的方法而不是必须依赖字符串操作。如果不声明变量,则无法使用end。是否有其他方法获取最后一个元素?如果不声明变量,则无法使用end。是否有其他方法获取最后一个元素?class_basename函数不存在。class_basename是a,而不是来自PHP本身。class_basename函数不存在。class_basename是a,而不是来自PHP本身。