[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вложенные функции
kilogram
Читаю вложенные функции, там такой пример,странно, не работает

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




Спустя 15 минут, 58 секунд (31.03.2012 - 21:35) sergeiss написал(а):
Цитата (kilogram @ 31.03.2012 - 22:19)
там такой пример,странно, не работает

Странно было бы, если бы он работал, сей пример... А где именно "читаешь"-то, где такое пишут?

Спустя 1 минута, 42 секунды (31.03.2012 - 21:37) kilogram написал(а):
Вот ступил, функцию с названием доллара написал, здест ошибка стопудово:
return $a * $a * ($)child($a);

Спустя 45 минут, 39 секунд (31.03.2012 - 22:23) kilogram написал(а):
Откуда вывелось 11, если в child попадает вообще 30, должно 31 быть.

Спустя 31 минута, 10 секунд (31.03.2012 - 22:54) sergeiss написал(а):
Цитата (kilogram @ 31.03.2012 - 23:23)
Откуда вывелось 11, если в child попадает вообще 30, должно 31 быть.

Покажи текущий код... А то "на кофейной гуще" гадать придется smile.gif

И вообще. Эти самые "вложенные" функции - по сути дела, самые обычные функции. Если у тебя выводится 11, а должно быть 31, то это говорит о том, что ты что-то не так сделал.

Спустя 19 минут, 13 секунд (31.03.2012 - 23:13) kilogram написал(а):
Код в самом первом посте.

Спустя 2 часа, 21 минута, 6 секунд (1.04.2012 - 01:34) sergeiss написал(а):
Во-первых, я надеюсь, что ты убрал знак "доллар" при вызове child (что ты сам же и нашел)? А во-вторых, покажи, все-таки, как ты вызываешь функции и что при этом выводится. Чудес не бывает обычно smile.gif

Спустя 13 часов, 54 минуты (1.04.2012 - 15:28) kilogram написал(а):

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



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

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

Спустя 57 минут, 46 секунд (1.04.2012 - 16:26) sergeiss написал(а):
Вот это вот объявление функций
function father($a){
echo $a, "<br>";
function child($b){
echo $b+1,"<br>";
return $b * $b;
}
return $a * $a * $child($a);
}


Равноценно другому объявлению:
function father($a){
echo $a, "<br>";
return $a * $a * $child($a);
}

function child($b){
echo $b+1,"<br>";
return $b * $b;
}


Единственная разница в том, что в "начальном" случае вторая функция не будет известна до тех пор, пока не будет вызвана первая.

А дальше уж сам подумай, что там должно быть, а что - не должно.

Спустя 1 день, 23 часа, 7 минут, 48 секунд (3.04.2012 - 15:34) kilogram написал(а):

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

Спустя 4 минуты, 52 секунды (3.04.2012 - 15:39) glock18 написал(а):
kilogram
то что вы хотите - называется closures. какая у вас версия php?

Спустя 1 минута, 41 секунда (3.04.2012 - 15:40) glock18 написал(а):
Цитата (kilogram @ 3.04.2012 - 12:34)
выводится 11, но следующая за ней строка она не берет это число 11 и не подставляет в переменную $b, почему подставляется 10, а не 11 в строке ниже?


вы же не присваиваете $b = 11, вы просто выводите $b + 1. потому в $b и остается 10

Спустя 22 минуты (3.04.2012 - 16:02) kilogram написал(а):
Точно, вы правы, спасибо за пояснение!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.