// Создаем функцию changeBirthday, которая принимает переменную $birthday по ссылке (&$birthday) и новую дату рождения function changeBirthday(&$birthday, $newBirthYear) { $birthday = date('Y-m-d', strtotime("$newBirthYear-01-01")); } // Устанавливаем начальное значение переменной $birthday $birthday = '2000-01-01'; // Вычисляем новую дату рождения $age = 23; $newBirthYear = calculateYear1($birthday, $age); // Изменяем значение переменной $birthday changeBirthday($birthday, $newBirthYear); // Выводим итоговую дату рождения echo "Итоговая дата рождения после изменений: $birthday";
А какие я выводы должен сделать в домашнем заданнии? В замыкании переменная не меняется, но если сменить переменную и выводить именно её, а не функцию то она меняется. Но это и без второй функции было понятно что переменная будет другая при выводе, а в функции из за замыкания та же будет, или я что то не правильно сделал КАКИЕ ВЫВООДЫ Я ДОЛЖЕН СДЕЛТЬ?
Для тех кто не справился с дз: $date1 = 1998; $func = function () use ($date1){ global $date2; function inn($year, $age){ $date2 = $year + $age; return $date2; } $date1 = $date2; return $date1; }; $func(); inn(1998,24); echo $date1;
Ну что, понеслась критика =)) 1. Зачем нужна такая длинная проверка??? Во-первых, вы уже определили тип аргумента в функции, и если вы ей передадите что-то отличное от типа данных array, вы получите ошибку. 2. Зачем проверять длину массива, если выражение if($some) даст абсолютно аналогичный результат. Вообще, объяснение замыкания в этом виде, как мне кажется, основано на замыканиях в JS. Это неправильно. Замыкание в PHP очень холиварная тема, и работает немного подругому. Раскрыта только одна особенность замыкания - хранение состояния. А как же отложенное исполнение? А как же рефлексия класса, например изменение поведения объекта через замыкание? Что такое замыкание в PHP вообще не раскрыто =((. Ничего не сказано про класс Closure, без которого вообще невозможно полностью разобраться в замыкании. Ничего не сказано про методы замыкания call и bindTo. Вообщем, если использовать замыкание как хранение состояния, вы не поймете зачем оно вам надо, и надо оно вам вообще. И тем более не разберетесь с многими важными функциями PHP, которые используют в своих аргументах замыкание, например array_map() или array_filter()... Ах да, если вы передадите внешнюю переменную по ссылке, то уже никакого хранения состояния в замыкании нет... Так зачем же оно, замыкание это? =)))
Ну и вроде как советуют count в цикле не использовать. Это функция и она каждый раз считает количество элементов массива. count присваивают переменной (к примеру length) и уже переменную используют в цикле.
Какого объема хранится окружение(в чем это измеряется? строки,переменные? ) ДО и ПОСЛЕ функции? Замена глобальных переменных понятно - зачем использовать именно такую альтернативу? Почему нельзя использовать просто глобальные переменные?
Автор об этом не упомянул, к сожалению. Глобальные переменные использовать опасно, т.к. велика вероятность наделать трудноотлавлиемых ошибок. Если где-то в какой-то функции вы изменяете переменную (в т.ч. случайно, опечатавшись в названии, или вместо == написав =) вы можете об этом не узнать, или забыть. Т.е. после вызова функции могут поменяться какие-то глобальные переменные, которые (по изначальному замыслу) она вообще не должна использовать. Т.е. так делать можно, если очень осторожно, но, вообще говоря, это считается дурным тоном.
Андрей, скажи пжлст что думаешь о PHPStorm? Пользуешься ли ты им и стоит ли новичку в пхп его использовать P.S. Голос похож на меддисона особенно когда говоришь "Всем привет..." кажется сейчас скажешь "с вами меддисон" )))
PHPStorm хорошая IDE, но в том случае, если вы постоянно пишите код и хотите или уже стали php программистом. Она удобная, ускоряет написание, отладку кода.
Тихий ужас. Видос 80% воды и пустой болтовни. Просто нелепость. Чувак, ты бы готовился хоть, читал по бумажке и потом монтировал удачные дубли. Такое видео должно быть 5 минут максимум с четким грамотным изложением. Это ко всем твоим "урокам" относится. А пока неуд.
@@andrievskii я серьезно ))) Делаешь хорошее дело, но не совсем правильно. Посмотри Алексея Земскова, например, он хоть по другой теме - хороший пример качественных видео. Успехов!
а как в js тут замкнуть нельзя? ну типа функция принимает аргументы и возвращает через ретерн другую функцию. а потом внешнюю функцию с аргументами записать в переменную и вызывать эту переменную как функцию, но уже с аргуменами для внутренней возвращаемой через ретерн ф-ии.
В PHP также можно создавать замыкания, используя анонимные функции (лямбда-функции) и функции обратного вызова (callback). Анонимные функции и функции обратного вызова в PHP позволяют создавать замыкания, которые сохраняют контекст и имеют доступ к переменным из внешней области видимости.
Огромное спасибо за уроки!
спасибо, по сравнению с тремя другими роликами и двумя статьями именно у вас в ролике нашла понимание, что такое замыкание
Андрей, Вы очень хорошо объясняете, самый лучший курс у Вас)
большое спасибо вам за ваш труд
Хорошо объяснил. Подписался
Отличная подача!
Всё ясно!
Спасибо за лекцию
наброски для дз, кому нужно
// Создаем функцию changeBirthday, которая принимает переменную $birthday по ссылке (&$birthday) и новую дату рождения
function changeBirthday(&$birthday, $newBirthYear)
{
$birthday = date('Y-m-d', strtotime("$newBirthYear-01-01"));
}
// Устанавливаем начальное значение переменной $birthday
$birthday = '2000-01-01';
// Вычисляем новую дату рождения
$age = 23;
$newBirthYear = calculateYear1($birthday, $age);
// Изменяем значение переменной $birthday
changeBirthday($birthday, $newBirthYear);
// Выводим итоговую дату рождения
echo "Итоговая дата рождения после изменений: $birthday";
function calculateYear1($birthYear, $age) //
хорошее объяснение, пример из php 7 в подлиннике?
Спасибо вам большое Андрей, за ваши уроки за ваш труд, я хочу посоветоваться , что дальше учить "CSS для профи" или "PHP"?
А какие я выводы должен сделать в домашнем заданнии? В замыкании переменная не меняется, но если сменить переменную и выводить именно её, а не функцию то она меняется. Но это и без второй функции было понятно что переменная будет другая при выводе, а в функции из за замыкания та же будет, или я что то не правильно сделал КАКИЕ ВЫВООДЫ Я ДОЛЖЕН СДЕЛТЬ?
Именно такие 😉
@@andrievskii А ну тогда всё нормально. Спасибо )))
Для тех кто не справился с дз:
$date1 = 1998;
$func = function () use ($date1){
global $date2;
function inn($year, $age){
$date2 = $year + $age;
return $date2;
}
$date1 = $date2;
return $date1;
};
$func();
inn(1998,24);
echo $date1;
Даже если убрать замыкание в этот примере, ничего не изменится.
Задание странно написано.
Ну что, понеслась критика =))
1. Зачем нужна такая длинная проверка??? Во-первых, вы уже определили тип аргумента в функции, и если вы ей передадите что-то отличное от типа данных array, вы получите ошибку.
2. Зачем проверять длину массива, если выражение if($some) даст абсолютно аналогичный результат.
Вообще, объяснение замыкания в этом виде, как мне кажется, основано на замыканиях в JS. Это неправильно. Замыкание в PHP очень холиварная тема, и работает немного подругому. Раскрыта только одна особенность замыкания - хранение состояния. А как же отложенное исполнение? А как же рефлексия класса, например изменение поведения объекта через замыкание?
Что такое замыкание в PHP вообще не раскрыто =((. Ничего не сказано про класс Closure, без которого вообще невозможно полностью разобраться в замыкании. Ничего не сказано про методы замыкания call и bindTo.
Вообщем, если использовать замыкание как хранение состояния, вы не поймете зачем оно вам надо, и надо оно вам вообще. И тем более не разберетесь с многими важными функциями PHP, которые используют в своих аргументах замыкание, например array_map() или array_filter()...
Ах да, если вы передадите внешнюю переменную по ссылке, то уже никакого хранения состояния в замыкании нет... Так зачем же оно, замыкание это? =)))
спасиб тебе, мил человек, ни одного толкового объяснения на ютубе, а тут сразу столько примеров куда копать
Потому что пример слизан из учебника Котерова
Ну и вроде как советуют count в цикле не использовать. Это функция и она каждый раз считает количество элементов массива. count присваивают переменной (к примеру length) и уже переменную используют в цикле.
да верно
Спасибо за ваши уроки.
Подскажите, а в замыканиях функции могут быть только анонимные или обычные тоже могут быть?
Только анонимные
А в выводе можно сказать, что если переменную для замыкания изменить внутри функции то и она изменится?
Будут ещё уроки по питону?
Какого объема хранится окружение(в чем это измеряется? строки,переменные? ) ДО и ПОСЛЕ функции? Замена глобальных переменных понятно - зачем использовать именно такую альтернативу? Почему нельзя использовать просто глобальные переменные?
Автор об этом не упомянул, к сожалению. Глобальные переменные использовать опасно, т.к. велика вероятность наделать трудноотлавлиемых ошибок. Если где-то в какой-то функции вы изменяете переменную (в т.ч. случайно, опечатавшись в названии, или вместо == написав =) вы можете об этом не узнать, или забыть. Т.е. после вызова функции могут поменяться какие-то глобальные переменные, которые (по изначальному замыслу) она вообще не должна использовать.
Т.е. так делать можно, если очень осторожно, но, вообще говоря, это считается дурным тоном.
Это было в предыдущих уроках @@ИванИванов-б3у8н
Андрей, скажи пжлст что думаешь о PHPStorm? Пользуешься ли ты им и стоит ли новичку в пхп его использовать
P.S. Голос похож на меддисона особенно когда говоришь "Всем привет..." кажется сейчас скажешь "с вами меддисон" )))
PHPStorm хорошая IDE, но в том случае, если вы постоянно пишите код и хотите или уже стали php программистом. Она удобная, ускоряет написание, отладку кода.
NetBeans советую новичку, легче в настроке
+
Я вот не очень пойму, это правильный вывод в браузер? - "2021" Вот код:
$environment = 25;
$nothing = function () use ($environment) {
function inn ($years, $year) {
$global = $year + $years;
return $global;
global $global;
}
$environment = $global;
echo $environment;
};
$nothing();
$years = 14;
$year = 2007;
echo inn($years, $year);
Тихий ужас. Видос 80% воды и пустой болтовни. Просто нелепость. Чувак, ты бы готовился хоть, читал по бумажке и потом монтировал удачные дубли. Такое видео должно быть 5 минут максимум с четким грамотным изложением. Это ко всем твоим "урокам" относится. А пока неуд.
Спасибо за комментарий))
@@andrievskii я серьезно ))) Делаешь хорошее дело, но не совсем правильно. Посмотри Алексея Земскова, например, он хоть по другой теме - хороший пример качественных видео. Успехов!
Андрей не обращай внимания, уроки очень классные благодаря тебе научился и понял многому, продолжай в том же духе
а как в js тут замкнуть нельзя?
ну типа функция принимает аргументы и возвращает через ретерн другую функцию.
а потом внешнюю функцию с аргументами записать в переменную и вызывать эту переменную как функцию, но уже с аргуменами для внутренней возвращаемой через ретерн ф-ии.
В PHP также можно создавать замыкания, используя анонимные функции (лямбда-функции) и функции обратного вызова (callback).
Анонимные функции и функции обратного вызова в PHP позволяют создавать замыкания, которые сохраняют контекст и имеют доступ к переменным из внешней области видимости.
// task 1
$mess = 'Какой-то текст =)' . '';
$var_func = function ($num1, $num2) use ($mess)
{
return $mess . $num1 * $num2;
};
echo $var_func(33, 5) . '';
// task 2
$age = '2004' . '';
$my_info = function($text) use ($age)
{
if ($age >= 2000) {
echo $text . ' = ' . $age;
}
};
echo $my_info('some text');
// task 3
function box()
{
function info($year_ob, $age)
{
$add = $year_ob + $age;
return $add;
}
}
echo box();
echo info(2004, 19);