我是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>";
字符串在运行时被解析,因此比上面的版本稍微贵一些。