这些代码有什么区别?


Whats the difference between these codes

我是PHP的初学者,正在尝试学习并想知道这些代码之间的区别:

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

我将把我的答案分成3部分。

1。双引号字符串

也就是像

这样的代码

echo "foo ";

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

$lol = "你好吗";

echo "foo $lol";

将产生如下输出:

你好吗

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

2。单引号字符串

。代码

$lol = 'hello';

echo '$lol user';

在本例中,PHP解释器按原样输出字符串。因此,如果您还没有猜到,输出将是

美元lol用户

(请注意$lol没有被它的值所替换,在这种情况下$lol只是一个以美元符号开头的字符串(不是变量)。

3。字符串连接

顾名思义,用于连接字符串。特殊的PHP字符。(点)用于连接字符串,例如

$lol = 'hello';

$bar = 'user';

echo $lol。’"。美元的酒吧。"。’;

输出将是

你好用户。你好吗?

性能和使用

现在揭晓答案。正如我已经说过的,双引号字符串将在其中查找变量,所以如果您不打算在字符串中输出变量,那么使用单引号字符串的总是更快。至于输出变量,最好将它们与单引号字符串连接起来,而不是使用双引号字符串。请看下面的例子:

echo "Hello {$arr['var1']['var2']}。你好吗?";

这段代码不清楚,当您想要输出包含引号等的字符串时可能会导致问题。正如你所注意到的(感谢Martina的评论),如果你想输出带有键的数组,你必须用{和}包围它们,所以双引号字符串中的变量读起来很乱。

这段代码

echo 'Hello '。$ arr [' var1 '] [' var2 ']。"。’;

可读性更好,解析速度更快。

希望这能回答你的问题。

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

这样做的优点是不需要在引号内搜索变量(使用单引号,否则解析器必须检查字符串中的变量)。

双逗号字符串内的变量为变量。因此,当代码被解析时,它被视为变量。在后面的示例中,将字符串与$variable连接起来。应该使用后一种方法,因为它提供了清晰的可读性,并且花费更少的时间来解析代码。另一件事是,您可以在后面的示例中使用单逗号,在第一个示例中使用双逗号。但是,将$变量从字符串中分离出来并使用concat是一个很好的实践。

单逗号加变量

示例:

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

输出
<div>$lang[CATEGORY_NAME]</div>

单逗号加连字符

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

双逗号加concat

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

输出
Category_name // whatever

当PHP遇到双引号"时,它执行字符串扫描来计算任何可能在里面(在运行时)提到的需要计算的变量。不像",单引号'使PHP直接使用字符串,不需要进一步的求值,因此更快。

在本例中

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

稍微好一些,因为<div></div>标记不需要PHP进行更多的计算。此外,PHP可以使用$lang['CATEGORY_NAME']执行一些优化,因为它在编译时标记它是什么(多亏了APC,编译只在脚本文件更改后完成一次)。

第一种情况

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

字符串在运行时被解析,因此比上面的版本稍微贵一些。