0

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

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

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

以及何时应该使用每一个。

4

4 回答 4

3

生病将我的答案分成3部分。

1.双引号字符串

换句话说,代码如

回声“傻笑”;

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

$lol = "你好吗";

回声“foo $lol”;

将产生以下输出。

foo 你好吗

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

2.单引号字符串

即像这样的代码

$lol = '你好';

echo '$lol 用户';

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

$lol 用户

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

3.字符串连接

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

$lol = '你好';

$bar = '用户';

回声$大声笑。' ' 。$酒吧。'。你好吗?';

输出将是

你好用户。你好吗?

性能和使用

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

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

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

这段代码

回声“你好”。$arr['var1']['var2'] 。'。你好吗?';

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

希望这能回答你的问题:)

于 2013-03-17T09:55:33.680 回答
1

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

双逗号与 concat

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

输出

Category_name // whatever

现在由您决定选择什么。

于 2013-03-17T09:47:16.857 回答
1
echo '<div>' . $lang['CATEGORY_NAME'] . '</div>';

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

于 2013-03-17T09:50:44.103 回答
1

当 PHP 遇到双引号"时,它会执行字符串扫描以评估可能在内部(在运行时)提到的任何需要评估的变量。与 不同",单引号'使 PHP 按原样使用字符串,无需进一步评估,因此速度更快。

在这种情况下,

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

稍微好一点,因为<div>and</div>标记不再需要 PHP 的任何评估。此外,PHP 可以执行一些优化,$lang['CATEGORY_NAME']因为它会在编译时标记它是什么(感谢 APC,在脚本文件更改后只进行一次编译)。

在第一种情况下

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

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

于 2013-03-17T09:54:07.393 回答