Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Вложенные функции PHP


Автор: kilogram 31.3.2012, 21:20
Читаю вложенные функции, там такой пример,странно, не работает
Код

<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>

Автор: kilogram 31.3.2012, 22:22
Откуда вывелось 11, если в child попадает вообще 30, должно 31 быть.

Автор: ElGuapo 1.4.2012, 12:12
1. Тот код, который вы привели, ни 11, ни 31 выдавать не должен, так как в строке 9 лишний знак $ ($child);

2. Если исправить, то выдает 10 11 31. Здесь 11 - это результат вызова child из father в строке 9 с параметром $a, ранвым 10, а 31 - вызова child самой по себе в строке 13.

Автор: kilogram 1.4.2012, 15:26
То есть передав аргумент 10 функции father, объявив нвутри этой функции father функцию child, тоже с одним параметром, я получается ему передаю то же значение 10, которое увеличивается на 1 после этой строки    echo $b+1,"<br>"; и стает 11?
Ещё, попробовал убрать вот эту строку   return  $b * $b;  и код со всем не изменился, а выдает те же значения что и с этой строкой, что и без неё? Почему?

Насчет этой строки:
return $a * $a * child($a);
здесь получается 10*10*30 что ли? Как считается?

Автор: ElGuapo 1.4.2012, 20:08
Позвольте дать вам один совет. На том уровне знаний PHP, которым вы обладаете, вам вложенные функции не нужны. К тому же, в PHP они реализованы довольно коряво, например, до вызова parent вызвать child вообще не получится. Образно говоря, вы не разобрались в элементарной механике, а просите помочь построить луноход. Такое обсуждение грозит затянуться надолго.

Вам нужно вначале понять, какое значение возвращает функция, как получить доступ к этому значению. Разобраться в том, как можно изменить значение переменной. Например, оператор echo никак изменить его не может; для присвоения нового значения существует оператор присвоения. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)