Вложенные функции ПХП
Читаю вложенные функции, там такой пример,странно, не работает
<html><body> <?php function father($a){ echo $a, "<br>"; function child($b){ echo $b+1,"<br>"; return $b * $b; } return $a * $a * $child($a); } father(10); child(30); ?> </body></html> |
Сорри, название функции с долларом написал
|
Откуда вывелось 11, если в child попадает вообще 30, должно 31 быть.
|
скрипт возвращает:
10 11 31. Всё верно. Передали father(10) (a = 10) Выполняется: 1. echo $a, "<br>"; // выводит 10 2. инициализируется child() 3. Запрашивается child(a): return $a * $a * child($a); // выводит 11 Передали child(30) (b = 30): 1. echo $b+1,"<br>"; // выводит 31 |
То есть передав аргумент 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, вне зависимости, какие там дальше будет действия. |
а строка
return $a * $a * child($a); сделает следующее: 10*10* (тут произойдет вызов функции child(10) ) и на экран выведется 11 — так как произошел вызов функции и она исполнилась: 1. вывела на экран аргумент+1 (10+1) 2. перемножила аргументы и вернула (в память, но не на страницу) получившееся значение. |
Спасибо за пояснение.
По поводу этой строки. child($a) = child(10) return $a * $a * child($a); 10*10*10=1000, откуда 10 тысяч? |
function child($b){
echo $b+1,"<br>"; return $b * $b; } child(10) выведет на экран 11, но в себе вернёт 10*10. итого: return $a * $a * child($a); = 10 *10 * (10*10). = 10 000 |
<?php function father($a){ echo $a, "<br>"; function child($b){ echo $b+1,"<br>"; return $b * $b; } return $a * $a * child($a); } $result = father(10); echo $result; echo '<br>'; ?> Если взять отдельно такой код, получается что после этой строки echo $b+1,"<br>"; выводится 11, но следующая за ней строка она не берет это число 11 и не подставляет в переменную $b, почему подставляется 10, а не 11 в строке ниже? return $b * $b; |
Часовой пояс GMT +3, время: 08:53. |