2011-05-08 60 views
5

非常简单;我已经阅读了文档,但也许我只是有点解释困惑。PHP中的静态变量字符串解析

class Test{ 
    public static $var = 'world'; 
} 

echo "hello {Test::$var}"; // only parses $var in current scope, which is empty 

有没有什么办法在这里实现所需的功能?我开始猜测不,因为我尝试了一些排列而没有成功。

澄清:我试图用PHP的变量解析,而不是连接。很显然,如果所期望的方法是不可能的,我会诉诸连接,尽管我希望是这样。

回答

8

变量解析双引号中的字符串仅适用于 “变量表达式”。这些必须始终以字节序列{$开头。你的静态标识参考,但是始于{T hencewhy PHP解析对您的双引号下一$而忽略Test::

你需要利用一些秘籍那里。无论是使用NOP包装函数:

$html = "htmlentities"; 
print "Hello {$html(Test::$var)}"; 

或预先定义的类名作为变量:

$Test = "Test"; 
print "Hello {$Test::$var}"; 

恐怕还有以其他方式做到这一点没有原生的方式。

+0

谢谢**马里奥**;我以前很怕那个;缺少对我所需功能的本地支持。我将不得不绕过来接近一些东西。 – Dan 2011-05-08 21:20:56

0

你总是可以将回声分解成小块。

class Test{ 
    public static $var = 'world'; 
} 

echo "hello ", Test::$var; 
0

这适用于字符串连接运算符

echo "hello ".Test::$var; 

编辑

注():函数,方法调用,静态 类变量和类常量 内{$}自PHP 5开始工作。但是,访问的值将被解释为 作为定义字符串的范围 中变量的名称。使用 单个花括号({})将不起作用 用于访问 函数或方法的返回值或 类常量或静态类 变量的值。

Source通过在PHP的This answer

+0

谢谢** Gazler **;我不想连接,试图利用变量解析。 – Dan 2011-05-08 20:25:20

+0

我不相信这是可能的。请参阅此问题:http://stackoverflow.com/questions/1267093/php-static-variables-in-double-quotes特别是发布的链接作为顶级答案,我在我的编辑中引用了该答案。 – Gazler 2011-05-08 20:29:15