最近我正在阅读php文档,并在字符串部分找到了有趣的注释:
自PHP 5起,函数,方法调用,静态类变量和{$}内的类常量工作。但是,访问的值将被解释为范围中变量的名称字符串已定义。使用单个花括号({})不能用于访问函数或方法的返回值或类常量或静态类变量的值。
请参阅www.php.net/manual/en/language.types.string.php
它说,我不能使用卷曲语法来获取object的方法调用返回的值。 这是手动中的错误还是我误解了它,因为我尝试了以下代码并且它的工作正常:
<?php
class HelloWorld
{
public static function hello()
{
echo 'hello';
}
}
$a = new HelloWorld();
echo "{$a->hello()} world";
答案 0 :(得分:3)
不能用于访问函数或方法的返回值或类常量或静态类变量的值
$a->hello()
不是如何调用PHP
中的静态方法而不是常量或静态类变量这是他们的意思:
class HelloWorld {
const A = "A";// <---- You can not use it for this
public static $B = "B"; <---- or this
public static function hello() {
echo 'hello';
}
}
$a = new HelloWorld();
$A = "{HelloWorld::A} world"; <-------- Not Work
$B = "{HelloWorld::$B} world"; <-------- Not Work
$C = "{HelloWorld::hello()} world"; <-------- Not Work
如果你现在尝试
$A = "X"; // If you don't define this it would not work
$B = "Y" ; //<------------- -^
echo "{${HelloWorld::A}} world";
echo "{${HelloWorld::$B}} world";
输出
X world <--- returns X world instead of A
Y world <--- returns Y world instead of B
答案 1 :(得分:0)
我从这个解释中理解的是,压力在于
(...)使用单个花括号......
所以在这个例子里,我想它想说:
echo "I'd like an {$beers::$ale}\n";
因此无法使用单个花括号
这就是为什么你应该使用双花括号,第一个将返回静态输出,第二个将返回最终输出,如下例所示:
echo "I'd like an {${beers::$ale}}\n";
^ ^ ^^