1

我最近在 Joomla 项目中遇到了很多错误,并且发现了诸如(在类代码中)之类的东西......

return "<span class='...

或者

echo "<h3 id='...

代替

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

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

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

4

4 回答 4

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;

我会选择最适合当前上下文的那个(关于可读性)。

于 2012-08-06T17:48:57.337 回答
5

如果字符串中的所有双引号都没有用\.

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

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

echo '<div class="test">' . $var . '</div>';
于 2012-08-06T17:49:28.177 回答
1

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

此外,在 HTML 标记中使用双引号是惯例,所以我会这样做:

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

在我看来,Joomla 的代码非常糟糕,您发布的内容只是另一个例子。

正如您在上面看到的,此方法的另一个优点是代码荧光笔和 IED 可以轻松区分“静态”字符串和变量。

于 2012-08-06T17:51:05.897 回答
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 相同,但与单引号一样,不能将变量放入字符串中。

于 2012-08-06T17:52:23.957 回答