PHP:{$ foo}和$ {foo}之间有区别吗

时间:2016-05-13 07:07:44

标签: php

有时您需要向PHP说明实际上变量名称是什么。我发现一位同事和我的做法略有不同。 假设您有一个变量$foo并希望输出附加了_constant_string的变量 我一直在使用

return "<input type='hidden' name='${foo}_constant_string' value='true' />";

而我的同事正在使用

return "<input type='hidden' name='{$foo}_constant_string' value='true' />";

(稍加设计的例子来简化它)。

我的快速测试没有发现明显的差异,但我很好奇:有区别吗?是否有理由偏爱另一个?

编辑: 我上面的例子使用了字符串,但我的问题更为笼统 - 我应该明确这么说。我知道你可以使用花括号进行转义,但是如果在两种使用方式之间存在(在任何情况下)差异,我都没有找到具体的观点。我得到了答案:没有字符串(这是“重复”帖子的内容),但是用于数组和对象(感谢@dragoste)。

3 个答案:

答案 0 :(得分:7)

不,没有别的。

var editorControl = new EditorControl();
var tmp = editorControl.xxxx.ActualHeight;

Php manual

Answer on stackoverflow

另一种方法是将它用于变量:

// Works, outputs: This is fantastic
echo "This is {$great}";
echo "This is ${great}";

或者对于数组:

$foo = 'test';
$test = 'foo';
var_dump("{${$foo}}"); //string(3) "test"

答案 1 :(得分:7)

看来,任何PHP版本都没有区别

    $foo = 'test';      
    var_dump("$foo");
    var_dump("{$foo}");
    var_dump("${foo}");

测试:https://3v4l.org/vMO2D

无论如何,我更喜欢"{$foo}",因为我觉得它更具可读性,并且适用于其他语法不适用的许多其他情况。

作为示例,让我们尝试访问对象属性:

var_dump("$foo->bar"); //syntax error
var_dump("{$foo->bar}"); // works great
var_dump("${foo->bar}"); //syntax error

同样的情况是数组。

http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing.complex

答案 2 :(得分:0)

以下声明之间没有区别 -

echo "This is {$great}";
echo "This is ${great}";

两个陈述的输出都是相同的。请检查以下示例 -

$great = 'answer';
echo "This is {$great}"."\n";
echo "This is ${great}";

Output:-

This is answer
This is answer