Допустим у нас есть объект — курсор из субд. Но мы хотим расширить его, для возвращения объектов. Добавить метод next_object(), который будет использовать метод getNext()
Проблема:
Мы не можем заставить модель возвращать объекты другого типа.
Решение 1: сделать итератор на этот курсор(который тоже является итератором). Сделать много магии для методов и свойств и получить новый итератор с нужным нам свойством.
Решение 2: Для PHP 5.4.0, использовать анонимные функции. О нём я и расскажу:
Внутри мапера, в методе findWhere($where) сделаем добавление анонимной функции в курсор, с передачей колбека и самого курсора
/** * @return MongoCursor */ public function findWhere($where) { $collection=$this->collection->find($where); $callback=$this; $collection->next_object=function() use ($collection, $callback) { $data=$collection->getNext(); $obj=$callback->create_object($data); return ($obj); }; return ($collection); } |
Теперь, по идее можно обращаться к $collection->next_object() и получать объект, созданный мапером. Но к сожалению это не работает, т.к. PHP попробует выполнить user_func_array и не найдёт метод. Для этого присваиваем свойство переменной, значение которого является анонимной функцией и выполняем, через $func():
public function findOneWhere($where) { $collection=$this->findWhere($where); $func=$collection->next_object; return ($func()); } |
Кривенько, но работает.
Антон Черноусов «Студенты в ИТ. Как не потерять 5 лет своей жизни» (http://blog.golodnyj.ru/2012/04/blog-post_1697.html).
Дисклеймер: Структура образования такова, что профильных дисциплин будет 10-20% от всех. Из этих 20% полезным будет хорошо, если 50%. Это реальность детка. Впрочем это порождает лулзы о «широкопрофильности» образования.
Что интересного в книге:
Даются практические советы: как подготовить рабочее место, какой софт юзать(ноут + evernote + dropbox + гуглосервисы. Ещё бы добавил virtualbox(виртуализируем операционки) + FeedDemon(читаем rss из гуглридера)).
Общее о таймменеджменте, мотивации и целеустремлёности. Сложная часть для меня, т.к. кроме канбан доски(мелкие цели без сроков) ничего не прижилось.
О моде и стадном рефлексе.
О пользе знаний (не путать с обучением в вузе)
О командной работе и пользе профессиональных контактов.
О сверхурочной работе и следствиях.
Прочитать было интересно, особенно после постоянного чтения фаулеров и банды четырёх и уж как 7 лет оконченного вуза. =)
С первой попытки не сдал =(
Личное мнение:
Экзамен сложный. Вопросы в основном длинные и требуют много времени, чтобы «въехать в окружение»
Из лулзов:
Вопросы, которые размерами больше экрана по высоте, ответы ещё один отдельный экран. Всё на английском, так что легко утерять нить вопроса =)
Из практического:
Нужно учитывать, что вопросы по MSSQL 2008R2, он немного иной.
Ну и в TODO:
Разобраться с XML. Его много.
Хитровыежнутые запросы из 2008 и 2008R2
Много триггеров и процедур/функций
В случае фейла можно пересдавать через 24 часа, если ещё один фейл, то уже через 2 недели