@Don2Quixote

Почему php скрипт игнорирует функцию?

<?php
	$arr = array(1, 2, 3, 4, 5);
	function geomPr($b1, $q) {
		$arr[1] = $b1;
		for ($n = 1; $n < 11; $n++) {
			if ($n == 1) {
				$b_previous = $b1;
			} else {
				$b_previous = $b_previous * $q;
				$b = $b_previous * $q;
				$arr[$n] = $b;
			}  
		}
	}

	geomPr(2, 2);
	print $arr[2];
?>


В начале кода в массиве указаны значения. arr[2] = 3. В конце кода должно вывестись значение arr[2]. По идее, это значени должно быть равно 4. Но выводится 3. (Потому что в начале кода в массиве указано такое значение.) То есть вызов функции geomPr(2, 2); Игнорируется компилятором. Почему так происходит и как это исправить?
  • Вопрос задан
  • 149 просмотров
Решения вопроса 1
Stalker_RED
@Stalker_RED
Вот он, ваш$arr[2]
ZHTrT2T.png

А функция внутри себя что-то делает, но результат не возвращает же. Давайте я угадаю, первым языком у вас был js, а теперь вы внезапно обнаруживаете, что замыкания есть не во всех языках, и даже если они есть, то работают не совсем так.

Замыкания в php есть, но они не применяются к каждой функции автоматически, как в js, и если вам они действительно нужны, придется делать это самостоятельно, как-то так: https://ideone.com/HvsrC2

И вообще, в таких простых случаях проще передать массив как параметр: https://ideone.com/JMIntQ

А еще лучше так: https://ideone.com/aWaK70
В таком случае более явно видно, что функция изменит массив $arr.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
kally
@kally
Вы к внешней переменной $arr обращаетесь.
Внутри функции $arr = $b1;
В конце функции необходимо вернуть значение

return $arr[$n];
}

а при печати:

$geomPr = geomPr(2, 2);
echo $geomPr;

Если Вы не возвращаете значение return $arr[$n]; внутри функции, то система не знает, что печатать или брать на вычисление.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы