Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2012, 16:27   #1
kilogram
Форумчанин
 
Регистрация: 04.03.2012
Сообщений: 144
По умолчанию Вложенные функции

Код:
<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 что ли? Как считается?
kilogram вне форума Ответить с цитированием
Старый 01.04.2012, 16:49   #2
Mortimoro
Форумчанин
 
Регистрация: 03.12.2010
Сообщений: 334
По умолчанию

PHP код:
function father($a){
    echo 
$a"<br>";
function 
child($b){
    echo 
$b+1,"<br>";
    return 
$b $b;
}
return 
$a $a child($a);
}

father(10); 
здесь ты вызываешь функцию father и передаешь ей значение $a (в данном случае 10). В этой строке:
PHP код:
return $a $a child($a); 
ты возвращаешь значение, полученное от умножения $a на само себя и вызываешь функцию child, которой передаешь значение $a. А функция child добавляет 1 и возводит в квадрат.

PHP код:
return $a $a child($a);
return 
10 10 child(10); //для примера со значением 10
return 10 10 121;
return 
12100//это число у тебя и возвращается 

Последний раз редактировалось Mortimoro; 01.04.2012 в 19:22.
Mortimoro вне форума Ответить с цитированием
Старый 01.04.2012, 16:53   #3
pompiduskus
юзер как все
Участник клуба
 
Аватар для pompiduskus
 
Регистрация: 10.01.2012
Сообщений: 1,586
По умолчанию

Но ты вызываешь вложенную функцию child(30); а рнр её не видит .. ты не можешь её вызвать как мне кажется .

может вот так .

PHP код:
function father($a){
    
$a *= $a $a;
    if(
$a){
        function 
child($a){
            
$a += 1;
            return 
$a *= $a;
        }
    }
return 
$a;
}

echo 
father(10); 
А не ) что то я не то написал вообще ) пардон ...
<Дзен - Вся вселенная в тебе > | Резюме: https://ch3ll0v3k.github.io/CV/

Последний раз редактировалось pompiduskus; 01.04.2012 в 16:55.
pompiduskus вне форума Ответить с цитированием
Старый 01.04.2012, 16:58   #4
Mortimoro
Форумчанин
 
Регистрация: 03.12.2010
Сообщений: 334
По умолчанию

кстати, в данном случае чтоб увидеть результат функции, надо его еще и вывести... вот так правильно:
Код:
echo father(10);
Mortimoro вне форума Ответить с цитированием
Старый 01.04.2012, 17:02   #5
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от kilogram Посмотреть сообщение
return $a * $a * $child($a); <- Function name must be a string
Эта строка выдаст Fatal error.
Andkorol вне форума Ответить с цитированием
Старый 01.04.2012, 18:50   #6
Gorychev
Участник клуба
 
Аватар для Gorychev
 
Регистрация: 08.03.2008
Сообщений: 1,537
По умолчанию

Никогда не пользовался подобным извратом и нигде не видел подобный код. Как я понял, child станет видна в глобальной области видимости после вызова father
Gorychev вне форума Ответить с цитированием
Старый 03.04.2012, 16:36   #7
kilogram
Форумчанин
 
Регистрация: 04.03.2012
Сообщений: 144
По умолчанию

Код HTML:
<?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>';
?>
Если взять отдельно такой код, получается что
после этой строки
Код HTML:
  echo $b+1,"<br>";
выводится 11, но следующая за ней строка она не берет это число 11 и не подставляет в переменную $b, почему подставляется 10, а не 11 в строке ниже?
Код HTML:
return  $b * $b;
kilogram вне форума Ответить с цитированием
Старый 03.04.2012, 17:32   #8
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от kilogram Посмотреть сообщение
после этой строки
Код HTML:
  echo $b+1,"<br>";
выводится 11, но следующая за ней строка она не берет это число 11 и не подставляет в переменную $b, почему подставляется 10, а не 11 в строке ниже?
Код HTML:
return  $b * $b;
Потому, что echo $b+1 просто выводит результат сложения значения переменной $b и единицы - при этом никак не сохраняя этот результат в памяти.
Для сохранения результата выражения в памяти - его значение нужно присвоить переменной:
PHP код:
$b 10// начальное значение
$b $b 1// $b = 11
// или
$b++; // инкремент, $b = 11
echo $b// выведет 11 
Andkorol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вложенные функции Красноглаз Microsoft Office Excel 1 05.12.2011 22:10
Вложенные функции или слишком много условий OgE®_M@G Microsoft Office Excel 4 03.11.2011 07:35
Вложенные запросы java_91 SQL, базы данных 1 07.07.2011 18:52
Паскаль: функции, вложенные циклы Liam_ Помощь студентам 2 23.12.2010 19:30