我怎样才能让PHP在双引号评估一个静态变量?

我想做的事情是这样的:

log("self::$CLASS $METHOD entering");

我已经试过各种{}的连击,以获得自我:: $类的变量值,但没有奏效。我目前正在与字符串连接解决,但它是键入疼痛:

log(self::$CLASS . " $METHOD entering");
有帮助吗?

解决方案

对不起,你不能这样做。它仅适用于简单的表达式。请参见这里

其他提示

不幸的是没有办法如何做到这一点呢。在这里答案的一个例子将不会在{${self::$CLASS}}工作,因为self::$CLASS不会返回self::$CLASS的内容,而将变量的返回内容与名称

下面是一个例子,它不返回myvar,但aaa

$myvar = 'aaa';
self::$CLASS = 'myvar';
echo "{${self::$CLASS}}";

我不知道回答你的问题,但你可以使用__METHOD__魔术恒定

使用存储在变量中的匿名身份的功能。这样,您将有$ {后立即:

$I = function($v) { return $v; }; $interpolated = "Doing {$I(self::FOO)} with {$I(self::BAR)}";

(我使用类常量在这个例子中,但这将静态变量的工作太)。

刚刚与级联生活。 你会惊奇地发现低效变量插值字符串可以的。

虽然这可能属于预优化或微优化的伞下,我不想到你居然在这个例子中获得任何优雅。

个人而言,如果我要让一方或另一方的一个微小的优化,我的选择是“快”和“更容易输入” - 我会选择“快”。因为你只输入了几次,但它可能会执行数千次。

我知道这是一个老问题,但我觉得很奇怪,没有人曾建议[sprintf][1]功能呢。

说:

<?php

class Foo {

    public static $a = 'apple';

}

您将与使用它:

echo sprintf( '$a value is %s', Foo::$a );

等你的例子其:

log(
    sprintf ( ' %s $METHOD entering', self::$CLASS )
);

是可以做到这一点:

log("{${self::$CLASS}} $METHOD entering");
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top