为什么php会在代码中抛出语法错误

时间:2011-08-07 05:44:24

标签: php

echo "<input  type=\"text\" size=3 name=\"{$item[\"name\"]}\"/>";

但是以下工作正常

echo "<input  type=\"text\" size=3 name=\"{$item['name']}\"/>";

根据我的理解,“真的逃脱了”

5 个答案:

答案 0 :(得分:6)

您无需转义{}内的引号。这应该被引用,因为它意味着PHP数组"name"的字符串索引$name。没有引号(或转义引号),name被视为常量(我假设它不是),然后你有一对不属于引号的引号。

OTOH,这也是正确的:

echo "<input  type=\"text\" size=\"3\" name=\"$item[name]\"/>";

name周围没有引号,也没有{}

请参阅http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing


重新:评论

任何没有引号或$符号的非关键字都被视为常量(因为您可以使用define函数定义),因此"name"(带引号)是一个字符串,{{没有引号的1}}是一个常数。

当这样写的时候,但是:

name

PHP首先会查找名为echo "{$item[name]}"; 的常量,如果它不存在,它将使用字符串name。但是,它(根据您的设置?)也会发出警告。

答案 1 :(得分:2)

$item["name"]是变量的完整名称,因此在使用某些打印函数时无法构建变量名称。

在这种情况下,最好连接字符串,而不是以隐式方式插入变量。 e.g。

echo "<input  type=\"text\" size=3 name=\"" . $item["name"] . "\"/>"; 

或类似

printf("<input  type=\"text\" size=3 name=\"%s\"/>", $item["name"]); 
//Parameters info at http://www.php.net/manual/es/function.sprintf.php

答案 2 :(得分:2)

为什么还要使用"?它打开PHP特殊字符解析,占用更多的处理器时间。最好使用'

通过这种方式,您不必转义所有HTML引号,因此脚本将更好,更短,并且更少的处理器将用于简单的文本处理,您只需将文本与变量连接。

echo '<input  type="text" size=3 name="'.$item['name'].'"/>"';

答案 3 :(得分:1)

这是因为解释器而你必须处理的边缘情况之一。没什么特别的。

$item[\"name\"]中,反斜杠\是非法的,不应该存在,因此您会收到语法错误。

答案 4 :(得分:-1)

想想逃离后想要的东西

echo "<input  type=\"text\" size=3 name=\"{$item[\"name\"]}\"/>";

会变成

<input  type="text" size=3 name="{$item["name"]}"/>";
你可以看到

是错误的,因为name属性之后的引号将在第二个引号处终止而其余部分挂起