我不太清楚如何组合直接输入的变量和字符串。
让我们使用变量$test
:
$test="prueba";
情况1。-
将变量括在双引号中" "
有效:
echo "Esto es una $test";
Resultado
:
Esto es una prueba
案例2.-
将变量括在单引号' '
中不起作用:
echo 'Esto es una $test';
Resultado
:
Esto es una $test
似乎当我们使用双引号时,$test
可以识别 的值,但如果我们使用单引号,则不会。
但是......让我们试试数组。
我们将使用这个数组:
$arr=array(array("id"=>1, "nombre"=>"Pedro"), array("id"=>2, "nombre"=>"Juan"));
案例3.-
阅读应用与案例 1$arr
相同的标准:
foreach ($arr as $row){
echo "ID: $row['id']\n";
}
Resultado:
PHP 解析错误:语法错误、意外的 '' (T_ENCAPSED_AND_WHITESPACE)、期望标识符 (T_STRING) 或变量 (T_VARIABLE) 或数字 (T_NUM_STRING)
而且,正如@Marcos 在这个问题底部的评论,在这种情况下也可以这样做:
echo "ID: $row[id]\n";
也就是说,没有单引号。作为附加说明,无法在子深度中访问值,这意味着这将无效:
echo "ID: $row[prop][valor]\n";
案例4.-
好的,让我们颠倒引号:
foreach ($arr as $row){
echo 'ID: $row["id"]\n';
}
Resultado:
ID: $row["id"]\n
ID: $row["id"]\n
在读取数组时,似乎echo
无法应用与上述相同的过程?
是省略捕获的变量的唯一选择row
吗?
foreach ($arr as $row){
echo 'ID: '.$row["id"].'\n';
//O bien:
echo "ID: ".$row["id"]."\n";
}
Resultado:
ID: 1
ID: 2
问题
看了上面的案例,想知道为什么echo不能识别单引号之间的变量,为什么案例1的方法在案例3中不起作用?
我提出这个问题是因为当我必须将变量与手写字符串结合使用时,我总是感到困惑。
我将根据PHP手册来回答你,字符串类型的文字可以通过四种不同的方式指定:
为了不扩展太多,让我们看看你的问题的前两个。
单引号
声明字符串的最简单方法是使用单引号(字符
'
)。例子:
双引号
如果字符串由双引号 (") 构成,PHP 会将以下转义序列解释为特殊字符:
转义字符:
变量分析
当使用双引号
""
或 heredoc指定<<<EOT
字符串时,将解析该字符串中的变量。有两种类型的语法:一种简单的和一种复杂的。最简单的语法是最常用和实用的。提供了一种在 a 中嵌入 a 、
variable
a 的值array
或 a 的属性的方法,而且工作量很小。object
cadena
分隔表达式的大括号可以识别复杂的语法。
简单的语法
如果遇到美元符号 (
$
),解析器将采用最大数量的符号来形成有效的变量名。用大括号分隔变量名称允许您显式指定名称的结尾。例子:
该示例的结果将是:
同样,您可以解析 a 的索引
array
或 a 的属性object
。该示例的结果将是:
复杂的语法(大括号)
这种语法之所以称为复杂不是因为它很复杂,而是因为它允许使用复杂的表达式。
可以通过此语法包含任何具有字符串表示形式的标量变量、数组元素或对象属性。只需按照在字符串外部出现的方式编写表达式,并用. 由于它无法转义,因此只有在紧跟. 用于获取.
{ y }
{
$
{
{\$
{$ literal
一些例子:
始终使用双引号字符串 (
""
) 进行连接。把你的变量放进去
"Esto es una notación {$variable}"
,因为它是最快的方法,仍然允许复杂的扩展,比如"This {$var['foo']} es {$obj->awesome()}!"
. 你不能用 style 做到这一点"${var}"
。随意将单引号
''
字符串用于数组键/值、变量值等完整的文字字符串,因为当需要未解析的字符串文字时,它们的速度要快一点。但我必须进行十亿次迭代才能找到 1.55% 的可测量差异。所以我会考虑为我的文字使用单引号字符串的唯一真正原因是为了代码清理,以明确字符串是文字。1亿次迭代:
查看更多迭代结果。
字体字符串(Strings)。
单引号用于文字字符串:它们不会用它们的值替换变量引用,也不会转义字符。
而双引号用于转义字符串:它们接受变量、引用(在大括号中,如下所示)和反斜杠转义字符:
尽可能使用单引号,因为它们更快更安全,除非您需要转义值。
如果您需要在转义字符串中添加双引号,您只需将它们转义: