在双引号PHP静态变量
题
我怎样才能让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");
不隶属于 StackOverflow