PHP for循环只运行一次

时间:2014-10-12 16:08:31

标签: php for-loop echo conditional-statements

我从代码学院学习PHP课程。在其中一个练习中,我试图实现一个条件函数,它将获取函数运行次数的参数。不幸的是它没有运行。我试图用树皮(2)两次运行树皮()。它只回应一次。我已经尝试过" do"," 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;
?>

5 个答案:

答案 0 :(得分:2)

您返回$this->speak,一旦返回值,整个函数就会停止执行。

您可以执行以下操作:

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

    return $return;
}

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

你想要做的是在for循环中运行bark函数,而不是在bark函数中使用for循环。

public function bark(){
  return $this->speak;
}

for($i = 0; $i < 2; $i++){
  echo $dog1 -> bark();
}

在树皮功能中循环的问题主要来自于你失去了很大的灵活性。

你可以在那里回声,但是从对象的方法输出数据远非理想。如果你需要在输出上执行某种逻辑怎么办?

你也可以在函数内连接,但是再次,如果你需要格式化输出怎么办?然后你必须再次拆分输出,这会破坏目的。

答案 3 :(得分:0)

return循环内的

for退出bark函数。所以狗只吠一次。

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

$dog1 -> bark(2);

答案 4 :(得分:0)

您必须更改这些行:

return $this->speak;

要:

echo $this->speak;

echo $dog1->bark(2);

要:

dog1->bark(2);

return语句立即停止了该方法,这就是您只获得一个echo

的原因