首页 > 解决方案 > 在php中,有没有办法确定生成字符串时是否使用了 ::class ?

问题描述

以下两个 return 语句将返回相同的字符串:

getClassName(): string
{
    return MyClassName::class; // returns 'MyClassName'
    return 'MyClassName';      // returns 'MyClassName'
}

我们也有调用这个方法的代码。

$className = getClassName();

在我们调用这个方法的代码中,有没有什么方法可以判断是否::class使用了 生成字符串?

我们使用的 IDE 能够检测何时::class被使用,并且我们希望在编译时以某种方式在我们的代码中使用这个逻辑。

标签: phpstringclassreturn-value

解决方案


IDE 可以查看源代码并查看您使用的语法。他们使用它来提供提示、交叉引用以及他们在您编辑时所做的所有其他好事。

但是一旦代码被编译和运行,大部分信息就被丢弃了。值没有任何关于它们是如何计算的信息——一个字符串只是一堆字符。有一些反射特性允许您访问调用堆栈以查看调用了哪些函数,因为在内存中实现返回是必需的,但数据不会跟踪值的来源。

因此,没有内置方法可以获取您要查找的信息。如果您需要跟踪这一点,则必须在应用程序代码本身中实现它。

getClassName(): array
{
    return ['source' => '::class', 'value' => MyClassName::class];
    return ['source' => 'string', 'value' => 'MyClassName'];
}

推荐阅读