【问题标题】:In php, is there any way to determine whether ::class was used when generating a string?在php中,有没有办法确定生成字符串时是否使用了 ::class ?
【发布时间】:2020-06-08 18:29:39
【问题描述】:

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

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

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

$className = getClassName();

在我们调用这个方法的代码中,有没有办法判断::class是否被用来生成字符串?

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

【问题讨论】:

  • 不,一旦有了值,就无法知道它的来源。
  • 如果你需要知道,你的设计有问题。关心函数如何计算其结果是违反模块化的。
  • IDE 当然可以解决问题,它查看的是源代码,而不是数据。
  • 好的,谢谢。如果您想将此作为答案发布,我很乐意接受。

标签: php string class return-value


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-09-20
    • 1970-01-01
    • 2022-06-12
    • 2010-09-12
    • 2022-12-19
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多