Показать сообщение отдельно
  #6 (permalink)  
Старый 01.04.2012, 16:40
Аватар для T-sh
Профессор
Отправить личное сообщение для T-sh Посмотреть профиль Найти все сообщения от T-sh
 
Регистрация: 04.12.2009
Сообщений: 579

Сообщение от 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, вне зависимости, какие там дальше будет действия.
__________________
С моих слов записано верно.
Ответить с цитированием