Pull to refresh

Comments 19

Это типа для тех, кто не осилил мануал?
Вы видимо не читали. Целью автора была не скопировать мануал, а дополнить его примерами не искусственными, которые помогут понять смысл. Я не сомневаюсь в вашей компетенции как разработчика, но все ли смогут привести пример использования метода __invoke()?

И да, новичкам оно тоже подойдет, иначе зачем бы я поставил флаг tutorial?

P.S. Печально видеть осуждение от пользователя, который не потрудился написать ни одного полезного поста или комментария.
«Сначала добейся» — не лучший ответ.
Tuman_2 прав, статья ни о чем. Примеров и так хватает. Я не умаляю вашу работу: перевод большого текста (и я не заметил сильных погрешностей в переводе) — дело не из легких. Но ценность статьи сомнительна.
Спасибо за наиболее развернутый ответ. И прошу прощенья, вспылил.
Да, согласен, ценность статьи можно поставить под сомнение, но ведь ведь и изначально статья Филиппа Брауна не была расчитана на профессионалов. Скорее на новичков или немного более продвинутых, кому было бы неплохо закрепить свои навыки.

А насчет ценности статьи, то для меня наиболее обьективный показатель ценности — это количество добавления в закладки, а их уже, ни много ни мало, 35 человек, что уже о чем-то да говорит.
Скорее на новичков или немного более продвинутых, кому было бы неплохо закрепить свои навыки.

Просто последнее время на хабре куча статей «для новичков» и очень мало глубоких технических статей. Мое личное мнение: статьи «для новичков» допустимы только на те темы, о которых вообще мало материала в рунете и на хабре в частности.

это количество добавления в закладки, а их уже, ни много ни мало, 35 человек, что уже о чем-то да говорит.

Если я не ошибаюсь, то аудитория хабра — больше 5М уникумов в месяц.
Пишу из 2018, внезапно почему-то перестал открываться php.net, захотел освежить память о магических методах, но не смог, если бы не ваша статья. Спасибо.
При всем уважении к вашему труду, но вы видимо тоже не читали, т.к. говорите, что
Целью автора была не скопировать мануал, а дополнить его примерами не искусственными, которые помогут понять смысл.
, а написано:
Согласен, данный пример является немного искуственным, однако я уверен, что вы действительно найдете применение этому методу.
(это все о методе __invoke()) Ну это так, ответ на то, что вы считаете, что я не читал. А по делу ниже.

Смысл в том, что нужно прочитать довольно длинную статью, с кучей примеров, чтобы получить пару мыслей (важность которых сомнительна) отличных от мануала. При этом, почерпнуть эти мысли в отдельном виде не получится.

Мне скорее жалко ваш труд, так как текст переведен хорошо, но его значимость сомнительна. Еще мне жалко время, которые вы украли у меня этой статьей =)

P.S. искуственным на искусственным исправьте.
Простите за украденное время и спасибо за оценку перевода и ошибочку.

А насчет __invoke(), по крайней мере более вразумительный пример в документации.
Спасибо, что слили карму за этот коммент!
Да, как же уже все надоели с этим методом! Twitter, Facebook заполнены такими «шутками», а теперь и на Хабр просочилось… Никакой логической ошибки тут нет и быть не может т.к. возвращается новый объект, а старый остается без изменений, что является обычной практикой для Value Object к коим относится и DateTimeImmutable.
Но это же не modify, логика совсем другая. Почему метод не называется create, copyAndModify или cloneWithParameters?
Более того, в документации написано, что этот метод «Alters the timestamp». Поэтому может поведение метода и соответствует семантике типа, но его название и тем более документация абсолютно неверные
Когда вы создаете копию обьекта в PHP, то сначала она становиться просто ссылкой на оригинальный обьект

А потом? :)
В общем-то и в оригинале не оч. точно написано, кстати.
Гмм… Вообще нет (и я не про «ться»). Хотя тут, наверное, неточность не у вас, а у автора оригинала.

Когда вы создаете копию обьекта в PHP, то она становиться просто ссылкой на оригинальный обьект. То есть изменяя оригинальный обьект вы изменяете и его копию


Тут не создается никакой копии объекта, никто не становится ссылкой на оригинальный объект, никакую копию вы не изменяете.
Просто $sheep1 и $sheep2 содержат идентификаторы, которые указывают на один и тот же объект.

А вот так они были бы ссылками:
$sheep1 = &$sheep2


Разница наглядно:
image
Эх… а я надеялся увидеть примеры магии, именно полезные примеры. Proxy-объекты, декораторы/адаптеры и все такое прочее. Если очень хочется увидеть такую магию — рекомендую посмотреть исходники PhpSpec и в частности библиотеки для создания моков — prophecy. Вот там магии хватает.

А использовать магию типа get/set/call я бы вообще не рекомендовал. Во всяком случае не для сущностей.
По мне так __toString один из самых полезных magic методов в php. Часто приходится делать что-то типа мелких процессоров для обработки текста и вызовы типа
$a = (string) new Processor($b); 

весьма удобны оказываются
Как раз на днях делал генератор xml отчетов с использованием этого метода. Для генерации отчета нужно было просто насоздавать экземпляров нужных классов и заполнить из свойства. И все. Потом просто передать этот объект в file_put_contents(), а дальше он сам сгенерит необходимую разметку. Очень удобно, что не надо вызывать отдельные методы типа ->toString() и т.п.
Весьма сомнительное решение если честно. Если бы класс назывался Report еще ладно…
Sign up to leave a comment.

Articles