我最近在Joomla项目上遇到了很多错误,并且发现了(在类代码中)......
return "<span class='...
或
echo "<h3 id='...
而不是
return "<span class=\"...
echo "<h3 id=\"...
这包括引号中的变量很多次,但它仍然可以通过单引号找到我的浏览器。在经历和改变这些之前,我想看看别人有什么要说的。我的项目位于http://dev.thediabetesnetwork.com。
我查了一下并找到了很多相互矛盾的信息,所以我想重新讨论最新的PHP /浏览器配置,看看我是否忽略了其他细节。
答案 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一样,但是像单引号一样,你不能把变量放到字符串中。