我从代码学院学习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;
?>
答案 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