PHP将Class和id编写为单引号而不是双引号。为什么?

时间:2012-08-06 17:45:04

标签: php html joomla

我最近在Joomla项目上遇到了很多错误,并且发现了(在类代码中)......

return "<span class='...

echo "<h3 id='...

而不是

return "<span class=\"...
echo "<h3 id=\"...

这包括引号中的变量很多次,但它仍然可以通过单引号找到我的浏览器。在经历和改变这些之前,我想看看别人有什么要说的。我的项目位于http://dev.thediabetesnetwork.com

我查了一下并找到了很多相互矛盾的信息,所以我想重新讨论最新的PHP /浏览器配置,看看我是否忽略了其他细节。

4 个答案:

答案 0 :(得分:5)

浏览器接受两者,因此没有更深层次的理由选择一个在另一个之前。从PHP的角度来看,单引号的可读性略高,因为您可以用双引号括起字符串并使用变量替换。比较自己

"<a href='$url'>Foo</a>"
"<a href=\"$url\">Foo</a>"
'<a href="' . $url . '">Foo</a>'

另一种解决方案是手动替换内容,例如

sprintf('<a href="%s">Foo</a>', $url);

或者heredoc

echo <<<HTML
<a href="$url">Foo</a>
HTML;

我会选择一个最适合当前环境的(关于可读性)。

答案 1 :(得分:5)

如果字符串中的所有双引号都被\转义,那么阅读起来要容易得多。

如果需要在字符串表达式中输出变量,则必须使用双引号。如果要在双引号内输出HTML,则可以使用'\"来包含HTML属性。第一个是首选,因为它会产生更清晰的PHP代码。

如果您不希望HTML使用单引号,那么您可以转义所有引号,使用heredoc syntax或将变量连接到字符串中,如:

echo '<div class="test">' . $var . '</div>';

答案 2 :(得分:1)

如果字符串不需要评估(例如,如果它包含变量等),则不需要使用双引号。实际上,因为双引号会导致对字符串进行求值,所以它们的效率低于使用单引号和连接。

此外,在HTML标记中使用双引号是常规,所以我就是这样做的:

return '<span class="test">' . $var . '</span>';

在我看来,Joomla的编码很差,你发布的只是另一个例子。

如上所述,此方法的另一个优点是代码高亮显示器和IED可以轻松区分“静态”字符串和变量。

答案 3 :(得分:1)

双引号和单引号在php中具有不同的功能。

您可以将变量或偶数数组放入带双引号的字符串中,但不能使用单引号。

HTML规范中都可以接受。事实上即使没有空格也没有引号。大多数人更喜欢我知道有双引号用于php,所以你可以使用变量而不会破坏你的代码和可读性,因为没有反斜杠。

return "<span class='foo'>$foo</span>";
return "<span class=\"foo\">$foo</span>";
return '<span class="foo">'.$foo.'</span>';
return '<span class=\'foo\'>'.$foo.'</span>';

所有工作,但第一个,大多数,是最容易阅读和输入。

你可以在php的文档中阅读所有关于php字符串,双引号,单引号,heredoc和nowdoc语法的内容:http://php.net/manual/en/language.types.string.php

echo <<<EOT
My name is "$name". I am printing some $foo->foo.
Now, I am printing some {$foo->bar[1]}.
This should print a capital 'A': \x41
EOT;

示例Heredoc语法允许您为长多行字符串选择起始和结束分隔符。 Nowdoc和heredoc一样,但是像单引号一样,你不能把变量放到字符串中。