我一直在代码学院学习php课程。在其中一个练习中,我尝试实现一个条件函数,其中它将使用一个参数来表示函数的运行次数。不幸的是,它没有运行。我试着用树皮(2)跑两次树皮()。它只回响一次。我试过"做一段时间"、"如果"answers"为了"。没有任何效果。为什么?
<?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;
?>
返回$this->speak
时,一旦返回值,整个函数就会停止执行。
你可以做一些类似的事情:
public function bark($up){
$counter = 0;
$return = '';
for($counter; $counter<$up;$counter++){
$return .= $this->speak;
}
return $return;
}
要添加另一个解决方案,根本不使用for
,请使用array_fill()
创建所需大小和内容的数组(因为它总是相同的文本),然后简单地使用implode()
接收字符串作为结果。
public function bark($up){
return implode(array_fill(1, $up, $this->speak));
}
for
循环内的return
从bark
函数中退出。所以狗只叫一次。
public function bark($up){
$counter = 0;
for($counter; $counter!=$up;$counter++){
echo $this->speak;
}
}
$dog1 -> bark(2);
您必须更改这些行:
return $this->speak;
收件人:
echo $this->speak;
和
echo $dog1->bark(2);
收件人:
dog1->bark(2);
return
语句立即停止该方法,这就是您只得到一个echo
的原因
您想要做的是在for循环中运行bark函数,而不是在bark函数中运行for循环。
public function bark(){
return $this->speak;
}
for($i = 0; $i < 2; $i++){
echo $dog1 -> bark();
}
树皮函数内部循环的问题主要来自于您失去了很多灵活性。
你可以直接在那里回声,但从对象的方法输出数据远非理想。如果您需要对输出执行某种逻辑,该怎么办?
您也可以在函数中进行连接,但是,如果您需要格式化输出,该怎么办?然后你必须再次分割输出,这违背了目的。