我是PHP的初学者,正在尝试学习并希望了解这些代码之间的区别:
echo "<div>$lang[CATEGORY_NAME]</div>";
echo "<div>" . $lang['CATEGORY_NAME'] . "</div>";
当我应该使用每一个。
答案 0 :(得分:3)
我将我的答案分为三部分。
换句话说,像
这样的代码echo“foo lol”;
在双引号字符串中,PHP解释器在字符串中查找变量,并用它们的值替换它们。所以下面的代码
$ lol =“你好吗”;
echo“foo $ lol”;
将产生以下输出。
foo你好吗
请注意,在双引号字符串中,PHP解释器将始终查找变量并将其值替换为它们,即使字符串中没有变量(这可能会导致性能问题,但稍后会对此产生影响)。
即。像
这样的代码$ lol ='hello';
echo'$ lol user';
在这种情况下,PHP解释器按原样输出字符串。所以如果你还没猜到,输出将是
$ lol用户
(请参阅$ lol未被其值替换,在这种情况下,$ lol只是一个以美元符号(不是变量)开头的字符串。
顾名思义,用于连接字符串。特殊的PHP字符。 (点)用于连接字符串,例如
$ lol ='hello';
$ bar ='user';
回声$ lol。 ''。 $ bar。 ”。你好吗?';
输出将是
你好用户。你好吗?
现在回答。正如我所说,双引号字符串将在其中查找变量,因此如果您不打算在字符串中输出变量,则始终更快以使用单引号字符串。 至于输出变量,它总是更好地用单引号字符串连接它们而不是使用双引号字符串。 请参阅以下示例:
echo“Hello {$ arr ['var1'] ['var2']}。你好吗?”
此代码不清楚,当您想要输出包含引号的字符串等时,它可能会导致问题。另外正如您所说(感谢Martina评论),如果您想使用键输出数组,则必须用{和}围绕它们,所以双引号字符串内的变量是一堆乱七八糟的东西。
此代码
回声'你好'。 $ arr ['var1'] ['var2']。 ”。你好吗?';
解析时更具可读性,速度更快。
希望这能回答你的问题:)
答案 1 :(得分:1)
双逗号字符串中的变量是可变的。因此,当解析代码时,它被视为变量。在后面的示例中,您将使用$ variable汇总字符串。应该使用后面的方法,因为它提供了清晰的读取性并且花费更少的时间来解析代码。 另一件事是你可以在后面的例子中使用单个逗号,在第一个例子中使用双逗号。但是将$变量与字符串分开并使用concat是一种很好的做法。
带变量的单个逗号
示例:
echo '<div>$lang[CATEGORY_NAME]</div>';
输出
<div>$lang[CATEGORY_NAME]</div>
带有concat的单个逗号
echo '<div>' . $lang['CATEGORY_NAME'] . '</div>';
输出
Category_name // whatever
带变量的双逗号
示例:
echo "<div>$lang[CATEGORY_NAME]</div>";//parser will search for variable inside string
输出
Category_name // whatever
带逗号的双逗号
echo "<div>" . $lang['CATEGORY_NAME'] . "</div>";
输出
Category_name // whatever
现在取决于你想要选择的内容。
答案 2 :(得分:1)
echo '<div>' . $lang['CATEGORY_NAME'] . '</div>';
这样做的好处是不在引号内搜索变量(使用单引号,否则解析器必须检查字符串中的变量)。
答案 3 :(得分:1)
当PHP遇到双引号"
时,它执行字符串扫描以评估可能在内部(在运行时)提到的任何需要进行评估的变量。与"
不同,单引号'
使PHP按原样使用字符串,无需进一步评估,因此速度更快。
在这种情况下,
echo '<div>' . $lang['CATEGORY_NAME'] . '</div>';
稍微好一点,因为<div>
和</div>
标记不再需要PHP的评估。此外,PHP可以使用$lang['CATEGORY_NAME']
执行一些优化,因为它标记了编译时的内容(感谢APC,在脚本文件更改后仅进行一次编译)。
在第一种情况下
echo "<div>$lang[CATEGORY_NAME]</div>";
字符串在运行时处解析,因此比上述版本稍贵。