【问题标题】:PHP for loop only runs oncePHP for 循环只运行一次
【发布时间】:2014-12-07 06:13:06
【问题描述】:

我一直在学习代码学院的 php 课程。在其中一个练习中,我尝试实现一个条件函数,它需要一个参数来表示该函数将运行多少次。不幸的是它没有运行。我正在尝试用 bark(2) 运行 bark() 两次。它只回响一次。我尝试过“do while”、“if”和“for”。没有工作。这是为什么?

<?php
   class Dog{
        public $numLegs = 4;
        public $name;
        public $speak = "Woof!";
  public function bark($up){
      $counter = 0;
      for($counter; $counter!=$up;$counter++){
      return $this->speak;
      }
  }

  public function greet(){
      return "Hello " . $this->name . "!" . "<br />";
  }

   public function __construct($name){
       $this->name = $name;
    }
   }
   $dog1 = new Dog("Barker");
   $dog2 = new Dog("Amigo");

   echo $dog1 -> bark(2);
   echo $dog2 -> name;
?>

【问题讨论】:

  • 当第一个return在循环内到达时,你的整个函数将被退出

标签: php for-loop echo conditional-statements


【解决方案1】:

您正在返回$this-&gt;speak,一旦您返回一个值,整个函数就会停止执行。

你可以这样做:

public function bark($up){
    $counter = 0;
    $return = '';
    for($counter; $counter<$up;$counter++){
        $return .= $this->speak;
    }

    return $return;
}

【讨论】:

    【解决方案2】:

    要添加另一个解决方案,根本不使用for 使用array_fill() 创建所需大小和内容的数组(因为它始终是相同的文本),然后简单地implode() 接收字符串作为结果.

    public function bark($up){
        return implode(array_fill(1, $up, $this->speak));
    }
    

    【讨论】:

      【解决方案3】:

      for 循环内的return 退出bark 函数。所以狗只叫一次。

      public function bark($up){
            $counter = 0;
            for($counter; $counter!=$up;$counter++){
               echo $this->speak;
            }
        }
      
      $dog1 -> bark(2);
      

      【讨论】:

        【解决方案4】:

        你必须改变这些行:

        return $this->speak;
        

        收件人:

        echo $this->speak;
        

        echo $dog1->bark(2);
        

        收件人:

        dog1->bark(2);
        

        return 语句立即停止该方法,这就是你只得到一个 echo 的原因

        【讨论】:

          【解决方案5】:

          您要做的是在 for 循环中运行树皮函数,而不是树皮函数中的 for 循环。

          public function bark(){
            return $this->speak;
          }
          
          for($i = 0; $i < 2; $i++){
            echo $dog1 -> bark();
          }
          

          在树皮函数内部循环的问题主要来自于你失去了很多灵活性。

          您可以直接在其中回显,但从对象的方法中输出数据远非理想。如果您需要对输出执行某种逻辑怎么办?

          您也可以在函数内进行连接,但话又说回来,如果您需要格式化输出怎么办?然后你必须再次拆分输出,这违背了目的。

          【讨论】:

            最近更新 更多