我可以使用不带大括号的嵌套语句吗?

时间:2018-06-25 22:08:52

标签: php statements

虽然在PHP手册中找不到“ foreachelse”,但我提出了自己的建议。

您会说以下建议吗? 我是紧凑代码的爱好者,并且我认为它具有良好的可读性。 而且它可以工作。

$consequences = array("You ", "will ", "burn ", "for ", "this!");

if(!empty($consequences)) foreach($consequences as $consequence) { 
    // 100 lines of code to be inserted here
    echo $consequence;
} else echo "No consequences";

在测试之前,我实际上以为我不能在“无大括号声明”中使用大括号,但是看起来可以。

在这种情况下,是否有使用卷发制动器的论点?

1 个答案:

答案 0 :(得分:1)

虽然对您来说这也许是紧凑而整洁的,但是它并没有遵循这些东西的编写惯例。您的代码将很难被其他开发人员阅读。尽管没有绝对的“标准”来编写代码,但世界上有很大一部分人采用了一些约定。

一行if (something) do;语句是邪恶的,即使不需要使用花括号,也可以将其分成两行:

if (something)
  do;

这不仅易于阅读,而且使调试更加容易,因为如果正在使用调试器,则可以在“ do”行上放置一个断点;或者,如果执行代码,则可以明确表达式的计算结果是否为true

在您的情况下,它将变为:

if(!empty($consequences))
  foreach($consequences as $consequence) { 
    // 100 lines of code to be inserted here
    echo $consequence;
  }
else
  echo "No consequences";

尽管这不是您所说的“紧凑”,但它是可维护的,并且在编写清晰的代码(稍后易于调试)时,非常容易看到代码路径,这是您的主要目标。

还要注意,由于PHP5.4不再需要array关键字,因此您可以使用以下代码:

$consequences = ["You ", "will ", "burn ", "for ", "this!"];

不仅更“紧凑”,而且与其他语言(例如C)更加内联,因此非常易读。

简而言之,如果您不愿意对“纯”代码的观点进行调整,那么您将在这个行业中苦苦挣扎。他人将很难与您合作,并且您将难以阅读他人编写的代码。