在双引号PHP静态变量(PHP static variables in double quotes)

2019-06-18 09:39发布

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

我想要做这样的事情:

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

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

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

Answer 1:

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



Answer 2:

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

下面是一个例子,它没有回报myvar ,但aaa

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


Answer 3:

我不知道回答你的问题,但你可以使用显示类名和方法__METHOD__ 魔法不变 。



Answer 4:

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

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

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



Answer 5:

刚住在一起的连接。 你会惊讶于字符串变量低效插值怎么可以 。

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

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



Answer 6:

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

说:

<?php

class Foo {

    public static $a = 'apple';

}

你将与​​使用它:

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

等你的榜样了:

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


Answer 7:

是的,这是可以做到:

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


文章来源: PHP static variables in double quotes