Сообщение от kilogram
|
То есть передав аргумент 10 функции father, объявив нвутри этой функции father функцию child, тоже с одним параметром, я получается ему передаю то же значение 10, которое увеличивается на 1 после этой строки echo $b+1,"<br>"; и стает 11?
Ещё, попробовал убрать вот эту строку return $b * $b; и код со всем не изменился, а выдает те же значения что и с этой строкой, что и без неё? Почему?
Насчет этой строки:
return $a * $a * child($a);
здесь получается 10*10*30 что ли? Как считается?
|
вот теперь я понял, с чем у вас непонятки
)
объявление функции не значит, что она тут же выполняется. она просто весит в памяти до тех пор, пока её не вызовут. т.е. объявляя вложенную функцию сразу ей ничего не передаётся.
а передастся ей значение 10 ($a) только тогда, когда её вызову с этим параметром, в вашем случае это строка №9.
и второй важный момент:
return и echo — это разные вещи.
То, что вы видите на странице после исполнения вашего кода — это не значение, которые возвращают функции, а лишь то, что указано в "echo".
Если написать так (убрать все echo):
<?php
function father($a){
function child($b){
return $b * $b;
}
return $a * $a * $child($a);
}
$result = father(10); // равно 10 000
echo $result; // выведется на страницу 10 000
$result2 = child(30); // равно 900
echo $result2; // выведется на страницу 900
?>
то в переменные $result и $result2 вернутся (то, что делает return) значения: 10 000 т.е. (10*10*(10*10)) и 900 (т.е. 30*30).
а если просто вызывать функции, то выведется на страницу лишь то, что в самих функция прописано в echo, вне зависимости, какие там дальше будет действия.