Я взял курс php из академии кода. В одном из упражнений я попытался реализовать условную функцию, в которой было бы указано, сколько раз эта функция будет выполняться. К сожалению, это не работает. Я пытаюсь запустить кору () дважды с корой (2). Это только эхо один раз. Я попытался «сделать пока», «если» и «для». Никто не работал. Это почему?
<?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));
}
return
внутри for
петля выходит из 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
То, что вы хотите сделать, это запустить функцию bark в цикле for, а не иметь цикл for в функции bark.
public function bark(){
return $this->speak;
}
for($i = 0; $i < 2; $i++){
echo $dog1 -> bark();
}
Проблема с зацикливанием внутри функции коры в основном связана с тем, что вы теряете большую гибкость.
Вы могли бы повторить прямо там, но вывод данных из метода объекта далек от идеала. Что если вам нужно выполнить какую-то логику на выходе?
Вы также можете объединить внутри функции, но опять же, что если вам нужно отформатировать вывод? Тогда вам придется снова разделить вывод, что побеждает цель.