PHP 编码问题?

3
以下的代码是否执行相同的操作,如果是的话,编码时哪个更好呢?当PHP代码缺少花括号时,有没有名称?
PHP代码。
<?php if (isset($_POST['email'])) { echo $_POST['email']; }?>
<?php if (isset($_POST['email'])) echo $_POST['email'];?>
5个回答

6

就我个人而言,我总是写可以使用大括号的语句。例如,看下面的代码:

if (UserIsLoggedIn())
    ShowCreditCardDetails();

现在,如果一些业余的程序员想要在用户登录时执行其他操作:
if (UserIsLoggedIn())
    WriteAuditLog();
    ShowCreditCardDetails();

现在,未登录用户将运行ShowCreditCardDetails()方法,因为当没有花括号时,if语句只会执行第一个语句。如果if语句如下所示:
if (UserIsLoggedIn())
{
    ShowCreditCardDetails();
}

如果花括号将要执行的整个代码块括起来,就不会发生这种情况。

我不认为这有一个名称,它只是写一个if语句的缩写方式。请注意,我还将花括号放在了它们自己的行上,超出了代码块和原始语句 - 这有助于提高可读性。


我完全同意,括号和花括号是很好使用的,它们也使代码更易读。 - ahmetunal
我通常尝试使用花括号,纯粹是因为如果我习惯于不在单个命令中使用它们,当我转移到不支持这样的无括号命令的Perl时,我会继续使用它们并创建大量错误。然而,我更喜欢将花括号放在同一行作为语句。我发现这样读起来同样容易,且浪费空间较少。 - Psytronic
如果你在第一个 { 前没有加 <enter>,我会同意你的看法,Andy。我真的很讨厌这样的 { } :( - AntonioCS
@AntonioCS,@Psytronic - 就我个人而言,如果是复杂的 if 语句(我会每行写一个条件),将大括号放在单独的一行可以清晰地区分 if 语句和代码块。如果这样做能让代码更易读,我并不介意浪费空间。 - Andy Shellam

2
在这种情况下,你可以选择第二个版本。之所以可以省略括号是因为如果控制语句的主体只包含一个语句,则不需要括号:
if (isset($_POST['email'])) 
    echo $_POST['email'];

当然,如果您扩展脚本并忘记了这一点,这可能会导致问题:
if (isset($_POST['email'])) 
    echo $_POST['email'];
    echo $_POST['foo'];

在这里,echo $_POST['foo'];并没有包含在if语句中。类似的例子如下:
 <?php if (isset($_POST['email'])) echo $_POST['email'];  echo $_POST['foo'];?>

无论哪种情况,echo $_POST['foo']; 都将被执行,不受 if 子句的影响。
但是如果你在模板中使用它,只想在字段设置时打印它,那么你不太可能扩展这个简短的代码。所以在这种情况下,“简短”版本应该没问题。 更新: 输出未经转义的用户输入可能非常危险。永远不要信任用户输入。

1

如果你不使用花括号,它会做完全相同的事情,但它会在第一个;之后停止,后面的代码就不再是if语句的一部分了(在你的例子中,这并不重要,因为你只有一个;)。个人而言,我讨厌这种快捷方式。


0
如果块语句计数只有一个,您不需要放置花括号。
但是,即使是单个语句,如果您放置了花括号,代码将更易于阅读,其他人也可以轻松理解。
<?php
if (isset($_POST['email']))
 {
 echo $_POST['email']; 
 }
?> 

现在代码将有缩进。


-2

4
我不同意“没有更好的编码这种事情”的说法。在我的经验中,我既见过糟糕的代码,也写过糟糕的代码,我已经意识到哪种心理上更好了。 - Andy Shellam
@Andy 这是你个人的观点。 - Your Common Sense
我认为这是开发人员普遍的观点 - 代码如果更容易阅读和理解(无需尝试重新格式化或弄清楚if语句何时开始/结束),那么它就是“更好的代码”。 - Andy Shellam
@Andy,问题在于地球上的每个人对代码可读性都有自己的判断。请意识到你对代码可读性的个人看法并不适用于所有人。地球上有些人从右到左书写他们的文本。如果因为你难以阅读而告诉他们他们都错了,那就太过分了。 - Your Common Sense
@Col. Shrapnel - 我知道很多都是个人意见,但说这种事情不存在就像说没有更好的驾驶一样。我对代码可读性的看法主要是通过编码标准形成的 - 这些标准是开发社区大多数人同意的。关于从左到右的示例甚至不是一个争论点 - 为什么你认为代码是用英语写的?能够阅读代码和轻松阅读代码之间有所不同。当代码引入安全问题的潜在可能性时,它并不是“更好的”。 - Andy Shellam

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