<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 быть. |
Покажи текущий код... А то "на кофейной гуще" гадать придется

И вообще. Эти самые "вложенные" функции - по сути дела, самые обычные функции. Если у тебя выводится 11, а должно быть 31, то это говорит о том, что ты что-то не так сделал.
Спустя 19 минут, 13 секунд (31.03.2012 - 23:13) kilogram написал(а):
Код в самом первом посте.
Спустя 2 часа, 21 минута, 6 секунд (1.04.2012 - 01:34) sergeiss написал(а):
Во-первых, я надеюсь, что ты убрал знак "доллар" при вызове child (что ты сам же и нашел)? А во-вторых, покажи, все-таки, как ты вызываешь функции и что при этом выводится. Чудес не бывает обычно

Спустя 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?
то что вы хотите - называется 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 написал(а):
Точно, вы правы, спасибо за пояснение!