PHP的方括号:何时需要加引号?何时不需要?

5
<html>
<head><title></title></head>
<body>
<?php
if (isset ($_POST['posted'])) {
if ($_POST['question1'] == "Lisbon") {
  echo "You are correct, $_POST[question1] is the right answer<hr>";
}

if ($_POST['question1'] != "Lisbon") {
  echo "You are incorrect, $_POST[question1] is not. the right answer<hr>";
}
}
?>
<form method="POST" action="quiz.php">
<input type="hidden" name="posted" value="true">
What is the capital of Portugal?
<br>
<br>
<input name=''question1" type=''radio" value=''Porto''>
Porto
<br>
<input name=''question1" type="radio" value=''Lisbon''>
Lisbon
<br>
<input name="question1" type="radio" value=''Madrid''>
Madrid
<br>
<br>
<input type=''submit''>
</form>
</body>
</html>

这是整个部分,来自PDF文件。问题是,他们没有说明为什么在if语句中使用' '表示question1,但在echo语句中没有引号。

简而言之:为什么在if语句中$_POST['question1']有' ', 而在echo语句中$_POST[question1]没有。它们是同一个变量。 谢谢。


对于数组值,键可以是带引号的字符串或数字。在双引号字符串中写入数组值时,不需要引号。请参见http://php.net/string(向下滚动到“变量解析”)。 - salathe
不相关,但是你的属性引号似乎有些混乱,使用''(两个单引号)而不是"(一个双引号)。不确定这只是你发布时的错误还是实际代码中的错误,但你可能需要检查一下。 - Wesley Murch
2个回答

4

始终使用引号(对于字符串键),除非在双引号字符串内。请参见手册中的字符串解析部分

$juices = array("apple", "orange", "koolaid1" => "purple");

echo "He drank some $juices[0] juice.".PHP_EOL;
echo "He drank some $juices[1] juice.".PHP_EOL;
echo "He drank some juice made of $juice[0]s.".PHP_EOL; // Won't work
echo "He drank some $juices[koolaid1] juice.".PHP_EOL;

我其实不知道在这种情况下$juices[koolaid1]是有效的。它看起来很松散,好像不正确。个人而言,除非需要控制字符或其他特殊情况,我很少使用双引号。 - Wesley Murch
$juice = $juices[0] <-- 这也完全没问题 - user166390
2
@Wesley,我同意这看起来很糟糕。PHP有奇特的插值规则。我更喜欢使用{$juices['koolaid1']}或完全避免这种语法。 - Matthew
是的,我相信通常最好避免使用这种语法。就像在这种情况下,他们没有转义帖子数据。为了这样做,你必须连接或准备另一个变量。 - Wesley Murch

0

数组键的字符是文字,因此文本应该有单引号。整数键不应该有引号。

以下是更详细的细节:

  • 当数组键以字母开头时,PHP会“理解”您想要放置单引号,如果您没有放置它们。所以$var[key]将被解释为$var['key']
  • 在双引号字符串中,用花括号括起来的数组变量可以避免问题。这也适用于HEREDOCS!echo "Your ID is {$user['id']}."
  • 您可以使用双引号,但建议除非进行变量插值,否则不要使用,即$var["someKey$num"]。即使在这种情况下,最好使用$var['someKey'.$num]$var["someKey{$num}"]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接