PHP中的惰性编码;迷你大乱斗

如果PHP世界中有一件事确实让我感到烦恼,那就是程序员编写了我所谓的“惰性代码”。这是可以工作的代码,但是创建时间最少(通常是指击键)。这几乎总是一件坏事,因为它难以阅读,难以更改并且几乎始终没有评论。主要问题是PHP是一种宽容而又易变的语言,它允许您以各种不同的方式和格式编写代码。

惰性编码遇到的最常见问题是程序员编写if语句时。这些可以用多种不同的方式编写,我发现的最常见的方法是省去大括号,如下所示:

if ($variable==true) 
    echo 'true';

这可以正常工作,但是如果您想向if语句中添加内容,会发生什么呢?以相同的示例为例,让我们尝试添加另一行代码来更改变量的值。

if ($variable==true) 
    $variable = false;
    echo 'true';

在PHP中,仅将无括号if语句的第一条指令计入该语句的一部分,因此,无论变量的值是什么,上面的代码将始终显示“ true”。再举一个例子,假设我们有一个这样的if / else语句。

if($variable==1) 
    echo '1';
elseif($variable==2)
    echo '2';
else
    echo '3';

如果我们在if或elseif块中添加另一行代码,则语法会出错,因为PHP无法将下面的块与上面的块匹配,请尝试运行以下代码,您会明白我的意思。

if($variable==1) 
    echo '1';
elseif($variable==2)
    $variable = 3;
    echo '2';
else
    echo '3';

因此,为了修改这些语句,我们需要在其中添加大括号,这看起来似乎并不多,但这意味着添加的代码量超出了我们的原意,并且在需要时很容易导致语法错误和代码损坏要做的就是做一个简单的更改。我可以记得至少有一个实例,其中我想修改一个包含30个左右子句的if语句,而不是在其中添加大括号,因此我决定编写第二个if语句,该语句允许我更改原始语句的一部分内容陈述。就维护而言,这是不好的,但是如果将一堆语句放在一起,那么一堆无括号的情况会变得更糟。它们通常每行写一次,这使得代码非常难以阅读。

if ($variable1==1) echo '1';
if ($variable2==2) echo '2';
if ($variable3==3) echo '2'; elseif ($variable4==4) echo '4';

如果同一块中有各种带括号和不带括号的if语句,则情况会变得更糟。试图弄清楚一个起点和另一个终点可能是绝对的痛苦。

编写代码时,我敦促您以可读且可维护的方式编写代码,并附上适当的注释。这不仅可以帮助其他人阅读您的代码,还可以让您自己告诉您6个月后您打算做什么。至少,您应该为函数和类编写PHP文档注释。

随着诸如框架之类的事物的出现,PHP编码通常变得更加专业,惰性编码开始变得不那么普遍了。那里有一些项目(即WordPress和其他类似的开源CMS系统)仍然有很多这类的东西。为了防止懒惰的代码蔓延到您自己的代码和项目中,您可以使用类似PHP_CodeSniffer的代码来自动遍历您的代码,并让您了解这种情况。如果您尝试将方括号放在PHP if语句之外(如我上面已经讨论过的),PHP_CodeSniffer将通过以下错误通知您:

> phpcs test.php
 
FILE: test.php
--------------------------------------------------------------------------------
FOUND 1 WARNING(S) AFFECTING 1 LINE(S)
--------------------------------------------------------------------------------
 2 | WARNING | Inline control structures are discouraged
--------------------------------------------------------------------------------

我很想听听每个人对惰性编码的想法。在PHP编码方面,您是否有个人讨厌的东西,而您看到的最懒惰的编码情况是什么?还是您认为只要编写代码就没关系吗?在下面发表评论。