你有什么建议来澄清我对PHP代码的理解´;s流

你有什么建议来澄清我对PHP代码的理解´;s流,php,Php,当我使用一些嵌套的if/else语句时,有时我会混淆我的代码逻辑是否符合我的原始想法。我使用了一些简单的程序代码,那么如何训练我的理解能力呢!在每个if/else块上方的注释中写下您的原始想法,然后确保每个块的条件与您在注释中概述的伪代码匹配。如果他们这样做了,请在您重新阅读注释后返回—如果注释中的逻辑仍然有效,那么您的代码很有可能很好地继续。我发现阅读概述条件作用的注释要比动态破译每个条件容易得多。当然,这也意味着要让评论保持最新 我所见过的最好的程序员之一用注释详细说明了函数应该如何工作,从

当我使用一些嵌套的if/else语句时,有时我会混淆我的代码逻辑是否符合我的原始想法。我使用了一些简单的程序代码,那么如何训练我的理解能力呢!在每个if/else块上方的注释中写下您的原始想法,然后确保每个块的条件与您在注释中概述的伪代码匹配。如果他们这样做了,请在您重新阅读注释后返回—如果注释中的逻辑仍然有效,那么您的代码很有可能很好地继续。我发现阅读概述条件作用的注释要比动态破译每个条件容易得多。当然,这也意味着要让评论保持最新


我所见过的最好的程序员之一用注释详细说明了函数应该如何工作,从而将函数剔除。他可以用通俗易懂的英语把它读回去,以确保它是有意义的,然后,正如他所说,实现是一个简单的翻译问题。这可能不适合所有人,但可能有助于您保持专注。

尝试将代码拆分为函数。如果您有深度嵌套的If/else语句,那么您可能可以为“If”测试和结果逻辑创建命名良好的函数。例如,更改:

if ($something == "a" && $somethingElse == "b") {
    // code
}
else if ($whatever > 4) {
    // more code
}
else {
    // yet more code
}

让你的代码读起来更像英语意味着你可以更容易地理解它是如何工作的。您还可以拆分功能,使每个功能只需要做一些简单的事情,然后将这些功能组合成更高级别的行为


编辑:关于注释,我倾向于使用命名良好的函数和变量,而不是大量的注释。如果您可以阅读没有注释的代码,那么这是理想的,但显然您有时仍然需要注释。绝对值得为每个函数编写Javadoc风格的注释,详细说明参数和返回值的含义,但代码中的内联注释有时阻碍大于帮助。

首先复制PHP文件;-)

然后尝试将一些深度嵌套的条件代码块重构为它们自己的函数,并仔细选择这些函数的名称


这将迫使您考虑代码。

通过适当的函数调用简化复杂的条件和内部逻辑。将代码重构为小块,使其更清晰。适当时使用switch语句,处理类似对象时使用多态性语句等

看到一些示例代码有助于给出一个更合适的例子,但是考虑下面的设计实例:

if($a.isAnimal && $a.animalIsAlive){
  if($a.isDog){
    if(!$a.hasHadWalk && date('h') > 6 && date('h') < 20){
            getLeash();
            attachLeashToCollar();
            putOnShoes();
            ...
        }else{
          //doNotWalk  
        }
      }else{
        //some other stuff here
      }
    }
if($a.isAnimal&&a.animalalive){
如果($a.isDog){
如果(!$a.hashadwark&&date('h')>6&&date('h')<20){
getLeash();
附件:衣领();
putOnShoes();
...
}否则{
//doNotWalk
}
}否则{
//这里还有别的东西
}
}
可以重构为

if(canBreathe($a)){
  if($a.isDog){
    if(shouldWeWalk($a)){
        walkDog();
    }
  }else{
    //some other stuff here
  }
}

function canBreathe($a){
    return $a.isAlive && $a.isAnimal;
}

function walkDog(){
    getLeash();
    attachLeashToCollar();
    putOnShoes();
    ...
}

function shouldWeWalk($a){
    return (!$a.hasHadWalk && date('h') > 6 && date('h') < 20);
}
if(可呼吸($a)){
如果($a.isDog){
如果(我们应该步行($a)){
随身听();
}
}否则{
//这里还有别的东西
}
}
可呼吸功能($a){
返回$a.isAlive&&a.isAnimal;
}
函数walkDog(){
getLeash();
附件:衣领();
putOnShoes();
...
}
函数shouldWeWalk($a){
返回(!$a.hashadwark&&date('h')>6&&date('h')<20);
}
我想

if (condition1True()) {
    handleCondition1();
}
else if (condition2True()) {
    handleCondition2();
}
else {
    handleDefaultCondition();
}

这个变体更可取,因为它能更好地理解程序的功能。

听起来不错,Cameron,我会试试,其他选项也很受欢迎。谢谢。您是否使用了正确的代码缩进?如果缩进错误,并且无法找出所有这些大括号是如何组合在一起的,一个很好的技巧是使用一个编辑器,可以为您重新缩进代码。是的,这是我目前的方法,正确缩进以理解代码嵌套。谢谢
if (condition1True()) {
    handleCondition1();
}
else if (condition2True()) {
    handleCondition2();
}
else {
    handleDefaultCondition();
}