我怎样才能让PHP来评估在双引号一个静态变量?
我想要做这样的事情:
log("self::$CLASS $METHOD entering");
我已经试过各种{}的连击,以获得自我:: $类的变量值,但没有奏效。 我目前正在与字符串连接解决,但它是一个痛苦的类型:
log(self::$CLASS . " $METHOD entering");
我怎样才能让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");