PHP для цикла запускается только один раз

Я взял курс 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;
?>

-1

Решение

Вы возвращаетесь $this->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));
}
1

return внутри for петля выходит из bark функция. Так собака лает только один раз.

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

$dog1 -> bark(2);
0

Вы должны изменить эти строки:

return $this->speak;

Для того, чтобы:

echo $this->speak;

А также

echo $dog1->bark(2);

Для того, чтобы:

dog1->bark(2);

return Оператор немедленно останавливает метод, поэтому вы получаете только один echo

0

То, что вы хотите сделать, это запустить функцию bark в цикле for, а не иметь цикл for в функции bark.

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

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

Проблема с зацикливанием внутри функции коры в основном связана с тем, что вы теряете большую гибкость.

Вы могли бы повторить прямо там, но вывод данных из метода объекта далек от идеала. Что если вам нужно выполнить какую-то логику на выходе?

Вы также можете объединить внутри функции, но опять же, что если вам нужно отформатировать вывод? Тогда вам придется снова разделить вывод, что побеждает цель.

0
По вопросам рекламы [email protected]