@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); Игнорируется компилятором. Почему так происходит и как это исправить?
  • Вопрос задан
  • 146 просмотров
Решения вопроса 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]; внутри функции, то система не знает, что печатать или брать на вычисление.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
28 апр. 2024, в 00:54
10000 руб./за проект
28 апр. 2024, в 00:53
70000 руб./за проект
27 апр. 2024, в 21:24
150000 руб./за проект