
Yury
22.12.2017
09:58:07
еще я не могу понять идею "слушателя" в php. там же скрипт тупо выполняется а не висит как демон

Dmitry
22.12.2017
09:58:31
идея в уменьшении связанности кода

Vitaliy Nameless
22.12.2017
09:58:49
как минимум

Google

Yury
22.12.2017
09:59:20
хотя с чего бы она не занимала если это объект встроенного класса

Dmitry
22.12.2017
10:00:46
т.е. позволяет не хардкодить связи между объектами... и у тебя наблюдатель вообще ничего не знает про наблюдаемого, а наблюдаемый знает только базовый интерфейс паттерна, т.е. по сути тоже ничего не знает про наблюдателя
код занимает памяти ровно столько, сколько кода написано ;) остальную память занимают данные ;)
при $foo = new Foo() код никуда не копируется ;)

Yury
22.12.2017
10:03:49
$foo = new Foo() это ведь объект? к анонимным функциям это же не относится?

Adel
22.12.2017
10:04:19
$this->resultImagesService->processResultImages(function(string $imageFileName, int $timestamp) use ($currentTimeStamp, $deleteTime) {
if($currentTimeStamp - $timestamp < $deleteTime)
{
// image is too fresh for deleting
return;
}
$this->s3Facade->deleteFile($imageFileName);
});
Вот сильно обрезанный кусок кода, который использует анонимную функцию
некое хранилище картинок.
которых надо перебрать и удалить слишком старые
это удобо сделать анонимной функцией
я немного подредактировал... потому что там из S3 удаляется скопом...

Yury
22.12.2017
10:06:42
это я вижу. а в методе в который она передается что происходит?

Google

Adel
22.12.2017
10:06:55
вот именно что неважно :))
там перебираются ключи из редиса.. и вызывается эта функция для каждого
а могли бы перебираться файлы..
и вызывать эту функцию для каждого файла

Yury
22.12.2017
10:07:50
аа.. ну типа как usort
для массивов

Pavel
22.12.2017
10:08:17
какая разница

Yury
22.12.2017
10:08:40
туда тоже передается фунция

Dmitry
22.12.2017
10:08:46
Adel усложняет... можно свести просто к фильтрации коллекции ;)

Yury
22.12.2017
10:09:19

Adel
22.12.2017
10:09:24

Yury
22.12.2017
10:10:01

Dmitry
22.12.2017
10:10:33
ну да, есть массив объектов, как получить массив Name-ов?
$names = array_map(function (Foo $foo) {
return $foo->getName();
}, $fooArray);

Adel
22.12.2017
10:11:21
ну с мап так себе конечно.. можно же просто foreach :)

Dmitry
22.12.2017
10:11:56
как минимум придется объявить доп. переменную.. не красиво ;)

Adel
22.12.2017
10:11:57
но если представить, что тут не массив а некое абстрактное хранилище имен файлов.. :)

Pavel
22.12.2017
10:12:05
С мапом отлично получается
лаконично и универсально

Yury
22.12.2017
10:12:39

Google

Pavel
22.12.2017
10:12:47
моно сразу return array_map делать

Yury
22.12.2017
10:12:55
всмысле откуда метод взялся
какого?

Dmitry
22.12.2017
10:13:07
для примера... просто был в Foo такой метод

Yury
22.12.2017
10:13:13
аа
объясните тогда вот это) —> (Foo $foo)
это объект в качестве аргумента?
почему запись такая? я не понимаю)

Grigori
22.12.2017
10:15:27
это знак доллара в качестве переменной
это скобки в качестве списка параметров

Yury
22.12.2017
10:15:53
а перед знаком что?

Grigori
22.12.2017
10:16:06
а перед знаком буквы в качестве типа
http://php.net/manual/ru/functions.anonymous.php

Yury
22.12.2017
10:16:40
а.. типа

Grigori
22.12.2017
10:17:48
базовый синтаксис надо знать
http://php.net/manual/ru/functions.arguments.php

Yury
22.12.2017
10:21:37
т.е. Foo это указание на тип.. несуществующий. для примера

Adel
22.12.2017
10:22:18
существующий. эта функция будет вызвана для массива, в котором по мнению юзера ТОЛЬКО обьекты этого класса
если это не так, то вызов функции с другого класса обьектом вызовет ошибку

Google

Yury
22.12.2017
10:22:45
все понял

Adel
22.12.2017
10:22:50
а Foo - обычное название класса для примера
Bar еще есть

Yury
22.12.2017
10:22:58
как и в случае с Closure

Grigori
22.12.2017
10:23:19
closure - это и есть анонимная функция

Yury
22.12.2017
10:23:26
т.е. принимаются в качестве аргумента только анонимные функции

Pavel
22.12.2017
10:23:37
есть еще FooBar

Grigori
22.12.2017
10:24:00
как принято говорить в таких случаях, Л - Логика!

Yury
22.12.2017
10:24:04
в такой записи public function command($name, Closure $action)

Vitaliy Nameless
22.12.2017
10:24:24
что тут происходит?

Adel
22.12.2017
10:24:33
да. туда принимается только функция. но не всегда анонимная

Grigori
22.12.2017
10:24:35
fatal error тут происходит

Vitaliy Nameless
22.12.2017
10:24:42
набрал на мамбовском тесте 310 баллов. а вам слабо?

Adel
22.12.2017
10:24:46

Yury
22.12.2017
10:24:52

Grigori
22.12.2017
10:25:02
сочинял вопросы для мамбовского теста, а вам слабо? :))))

Adel
22.12.2017
10:25:02

Vitaliy Nameless
22.12.2017
10:25:30
@Adelf32 ага…

Adel
22.12.2017
10:25:34
анонимные функции подходят

Google

Grigori
22.12.2017
10:25:49
фишер лет 10 назад постил тему по вопросам для тестов

Yury
22.12.2017
10:26:00

Adel
22.12.2017
10:26:06
наверно...

Grigori
22.12.2017
10:26:38
не для любых, только для объектов
для любой нужен тип Callable

Yury
22.12.2017
10:27:26
http://php.net/manual/ru/class.closure.php
тут написано Класс используемый для создания анонимных функций.

Vitaliy Nameless
22.12.2017
10:30:16
что за темы по вопросам от фишера?

Yury
22.12.2017
10:30:29
там постоянно пишется "замыкание". в данном контексте переданная функция и называется "замыкание"?
или я опять что то не так понял

Adel
22.12.2017
10:30:53
блин почитай чтонибудь а

Vitaliy Nameless
22.12.2017
10:30:59
лол

Adel
22.12.2017
10:31:02
гугл например

Yury
22.12.2017
10:31:23
понятно
когда стараешься формулировать вопросы, чтобы ответом было "да/нет".. даже на это сложно отвечать
"ты че не понял? мы ничего тут не продаем! это ПРОСТО магазин"

Pavel
22.12.2017
10:34:04

Vitaliy Nameless
22.12.2017
10:34:21
ну вамба свой тест обновила немного под современные реалии
а вот фидмишный все еще старый

Pavel
22.12.2017
10:35:03
Мне в прошлом году попалась задачка на php4 )

Vitaliy Nameless
22.12.2017
10:36:52
ну дык. в ногу со времени