这些代码之间的区别是什么

时间:2013-03-17 09:39:17

标签: php

我是PHP的初学者,正在尝试学习并希望了解这些代码之间的区别:

echo "<div>$lang[CATEGORY_NAME]</div>";

echo "<div>" . $lang['CATEGORY_NAME'] . "</div>";

当我应该使用每一个。

4 个答案:

答案 0 :(得分:3)

我将我的答案分为三部分。

1。双引号字符串

换句话说,像

这样的代码
  

echo“foo lol”;

在双引号字符串中,PHP解释器在字符串中查找变量,并用它们的值替换它们。所以下面的代码

  

$ lol =“你好吗”;

     

echo“foo $ lol”;

将产生以下输出。

  

foo你好吗

请注意,在双引号字符串中,PHP解释器将始终查找变量并将其值替换为它们,即使字符串中没有变量(这可能会导致性能问题,但稍后会对此产生影响)。

2。单引号字符串

即。像

这样的代码
  

$ lol ='hello';

     

echo'$ lol user';

在这种情况下,PHP解释器按原样输出字符串。所以如果你还没猜到,输出将是

  

$ lol用户

(请参阅$ lol未被其值替换,在这种情况下,$ lol只是一个以美元符号(不是变量)开头的字符串。

3。字符串连接

顾名思义,用于连接字符串。特殊的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>";

字符串在运行时处解析,因此比上述版本稍贵。