PHP Manual
/
基本知识

引号的特殊含义

22. 08. 2019

Obsah článku

在PHP中,通常可以用撇号代替引号,达到同样的效果。有时我们甚至故意使用引号和撇号的组合来实现不同的输出,而不必使用转义。

TLDR: 在某些情况下,使用引号是很危险的,所以在任何地方都要使用撇号来代替。引号只适用于特殊情况

角色 名称
" 引号
' 撇号

例一--同样的输出

echo "你好,世界!"; // 这也是一样的
echo '你好,世界!'; //像这样

在这种情况下,引号或撇号的使用并不重要。因此,从表面上看,引号和撇号之间似乎没有什么区别。

引号和撇号的组合

请考虑以下代码。

echo '我最喜欢的颜色是 "红色"!';

如果我用 "回车 "来给被写出的字符串定界,就会模糊不清地显示出字符串的开始和结束,所以我用 "撇号 "来给字符串定界,这样就解决了这个问题。

在以引号为界的字符串中插入引号

偶尔会有这样的情况,我需要在同一个字符串中同时列出引号'和撇号'。你不仅可以使用两个字符串的连接,还可以使用所谓的escaping的字符。

echo "这个字符串/"包含/"引号。";

在这种情况下,反斜线的含义是 "正是这个字符",因此引号不会被视为字符串(或其他东西)的结尾,因此它将永远是一个引号。在无法保证其持久性和可能被误解的情况下,其他奇怪的字符也可以用这种方式标记。

字符串内的变量

引号可能是非常棘手的,因为它允许你直接在字符串中插入变量。

$color = '红色';
echo "Moje oblíbená barva je {$color}, a tvoje?";

更安全的是撇号,它不允许这样做,你需要折叠字符串。

$color = '红色';
echo '我最喜欢的颜色是' . $color . '和你的?';

良好的习惯

一般来说,我建议使用撇号(如果可能的话)来限定任何东西,因为它们在字符串中远没有引号那么常见。

此外,PHP是一种网络语言,即用来生成HTML文档,其中引号是非常常见的,正是因为它们也被用来生成HTML代码的一部分。就个人而言,我建议习惯于在任何地方严格使用撇号,因为这样你就不必记住你所包围的东西。

引号行为

小心点!不要把引号完全丢掉!它们有一些特殊的优点,对高级的PHP工作很有用--然而,初学者认为它们是错误的,不理解它们。

$x = 10; // 设置一个变量
echo "Hodnota proměnné je: $x, přesně."; // 和一个列表

在引号内,你也可以列出变量的值,或者美元符号使它后面的一切都成为变量。因此,如果你不想输出一个变量的值,而是输出美元符号,你必须转义。

$price = 25; // 价格以美元计
echo "Cena produktu: $price\$"; //打印出 "产品价格:25美元"

在这种情况下,引号的优势是值得怀疑的,使用撇号和简单地连接字符串可能更好。

$price = 25;
echo '产品价格。' . $price . '$'; //打印结果与前面的例子相同

**注意:**以美元为单位的价格正确地写成了$25的格式,这将引起更大的混乱,因为$price的符号实际上调用了一个叫做变量的东西(在变量名称中我们调用了要调用的变量的名称--只是混淆)。

**TIP:**你可能对variable变量感兴趣。

字符串指定

一般来说,任何在引号或撇号中的东西都被当作一个字符串处理。因此。

$x = 5; // 这是另一回事。
$x = "5"; //比这更重要。

在第一种情况下,数字5被存储在**$x变量中,在第二种情况下,字符串"5 "被存储在同一个变量中。幸运的是,这在PHP中并不重要,你可以用(几乎)同样的方式来处理这两种变体,因为PHP可以根据变量的内容自动变换**变量。然而,一般建议不要把数字写在引号里,特别是对于计算操作来说,这样会出现四舍五入的错误。

有时我可能想把一个函数的输出存储在一个变量中。

$pi = 3.14159;
$zaokrouhleni = round($pi); // 这样做是正确的
$zaokrouhleni = "round($pi)"; //这是 "错误的"(问题是我期望什么输出)。

第二种情况下的错误只是在引号中,当round()函数的输出不是存储在$round变量中,而是调用此函数的字符串。

**TIP:**值$pi不必像这样直接输入脚本,我们可以使用pi()函数,这对更复杂的计算来说更准确。

逃逸的特殊含义

**警告:**下面的例子只在引号中起作用,如果你用撇号括起来,它们就会像普通字符一样,没有特殊意义(除了````,它逃过撇号)。 当我想在引号或撇号内输出一些特殊字符时,可以将其解释为语言表达式,从而进行处理,即使程序员没有这个意思。我们已经展示了一个例子;本节描述了可能的行为例外。

这是因为有时逃避本身就带有特殊的含义。例子。

echo "长文本,分为两行。";

前面的例子打印出来了。

Dlouhý text, rozdělený na
dva řádky.

因此,如果我们想写出一个斜线,我们必须同时转义它(在这种情况下转义`n'字符是不必要的,因为它将被理解为再次转义,或者在这种情况下我们必须根本不转义)。

echo "长文本,分为两行。";

像这样的特殊字符还有很多,例如`t'可以做一个tab。完整的清单在官方文件中。

在转义中真正使用特殊字符

首先,我想指出的是,几乎任何事情都可以在PHP中以多种方式完成,这里给出的例子只是为了说明问题的处理方式。

例如,如果我们想逐行解析文本,我们可以使用explode函数。

$parser = explode("\n", $retezec); // 逐行解析文本

在这种情况下,使用特殊字符n是有意义的,因为我们可以非常有效地说,我们想通过换行来进行解析。

$parser = explode('
', $retezec);

**警告:**在Unix和Windows系统中,用于标记行尾的字符是混乱的。例如,Windows使用CRLF(一对rn字符),而Linux只使用LF(一个n字符)。在逐行解析时,应牢记这一点。通常情况下,通过将字符规范化为LF`来解决这个问题。

摘要

如果可以的话,在任何地方都使用括号

了解引号的使用,并只在必要时(或一般情况下好)使用引号是很好的。如果你输出的文本可能包含引号,请用撇号将其括起来(这时的行为更可预测)。就个人而言,我使用引号来表达各种特殊字符,这些字符用撇号输入是不必要的,需要复杂的转义。

Jan Barášek   Více o autorovi

Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.

Rád vám pomůžu:

Související články

1.
3.
Status:
All systems normal.
2024