Simpliest Я прекрасно понимаю, что тебе _нечего_ сказать по-существу кода, из-за которого ты развел этот срач. Тебе надо было принципиально дать критическую оценку, и сейчас ты просто настаиваешь на своей правоте. Тот код, который ты приводил "выше по теме", был основан на моем коде, на которов впоследствии основан последний. Придирка к именам приатных методов - это в высшей степени бессмысленаня критика. Константы используются часто для задания какой-нибудь конфигурации.
Солидарен с Simpliest, это говнокод по нескольким пречинам: - конфигурационные данные выносятся в конфигурационные файлы, а не объявляются константами в классах. - названия классов, методов и переменных должны быть самоописывающими самих себя - должно присутсвовать хоть какое-либо форматирование кода - класс должен являться автономной частью системы, поэтому не должно присутвовать никаких "echo" и глобальных переменных. Получили данные на входе -> обработали -> отдали на выход. - забудь про "волшебные методы", такой же дурной тон как и использование суперглобальных переменных.
Вот, это уже гораздо лучше. - на счет конфигурации - согласен, но в рамках моей задачи это излишне. - Опять повторюсь, что речь идет о двух приватных методах. Названия этих методов не могут никого запутать, они состоят из нескольких строк кода, по которому суть понятна лучше, чем по любому названию. Да и вызываются они в коде по 3 раза. - Код вообще-то отформатирован полностью o_0 - шаблонизатор как раз нужен для генерации представления. По-моему, echo логичнее в нем, чем в контроллере. В крайнем случае, собрать вывод не сложно. - волшебные методы - это круто
Приватные методы или нет, никто не даёт гарантии, что рефакторить код не придётся в дальнейшем другим людям. У программиста должна выработаться привычка давать корретные названия, потом самому будет приятней смотреть свой старый код. Моё мнение что окончательные действия вывода на экран должны происходить в месте инициализации конроллера, т.е. в индексе, так как может возникнуть такой вариант, когда вся система вместе с ёё конроллером будет инициализирована в другой системе в качестве подсистемы и данные, полученные на выходе будут проходить дальнейшую обработку. Насчёт форматирования, не припомню ниодного стиля, позволяющего писать названия классов с маленькой буквы и где названия переменных начинаются со знака "_".
ИМХО есть шаблонизатор, а есть некая "OutputStrategy" которая и рулит выводом, заголовками и проч. Впрочем это скорее дело вкуса
Я тебе и так достаточно много сказал. То что ты не смог это прочитать - твои проблемы. Это шедевр PHP: <?php const D = 1; If (D ==1) {} По остальному вопросов нет, поскольку претензии к коду у меня аналогичные. А вот магические методы на мой взгляд вполне допустимы они обеспечивают гибкость и удобство написания. А, ну и форматирование - непринципиально.
Volt(220) Во-первых, принцип достаточно стандартен. Несколько глупо делать замечания по сути ложки - не находишь? Во-вторых, к предыдущему варианту кода претензий практически не было, за исключением непонятного final и стремных манипуляций в __get. В-третьих, из-за говнокода добираться до сути - крайне сложно Оно конечно может и в навозе золото бывает, но ковыряться там не каждому охота. Верно?
Simpliest Суть ложки - переносить что-либо в себе. Ложки они разные... Большие, маленькие, тяжелые, легкие, разной формы, с дырками и т.п. (я имею ввиду ту часть что не является ручкой). У меня вообще есть ложка где эта часть развернута на 90 градусов. Эти характеристики напрямую влияют на способность ложки соответствовать своей сути (слишком тяжелой нельзя пользоваться, слишком маленькая не поместит все что надо и т.д.). В то же время исполнение ручки не столь важно. Да ложку будет не удобно держать или она будет не столь красива, но ей можно будет пользоваться. Возможно слово суть не совсем точно. Однако, я думаю, смысл того, что я хотел сказать, в предыдущем комментарии понятен.
Volt(220) Попытка оправдать товарища - вполне очевидна. Остальное для меня весьма туманно Обсуждать какой размер ложки нужен, сколько в ней должно быть дырок, нужна ли повязочка(и какая именно) в виде кеширования - не вижу смысла. Зависит от владельца и конкретных задач. Обсуждать же наличие двух ложек на одном конце ручки, да еще с какими-то шипами - крайне затруднительно в виду общей нелицеприятности продукта. То что ты называешь сутью - является конкретной имплементацией (для чая, для супа и т.д.) и слишком индивидуально. Суть ложки в том, что черпать суп/чай и т.д. лучше именно ей, а не вилкой. А прежде чем обсуждать логические просчеты в построении, автору бы недурно исправить архитектурные ошибки (в виде настроек через константы) и предоставить документацию или написать самодокументированный код (кстати, если бы он это сделал то сразу бы самостоятельно выловил ряд ошибок). Ты готов вместо автора доказывать неговнокодность его творчества?
Simpliest ничего не смог конкретного нагуглить по "самодокументирующийся код",(кроме приколов на хабре) это как?просто понятный по прочтению?
Простой, понятный. Хорошо оформленный. С "говорящими" названиями методов, функций и переменных (примеры можешь посмотреть в любом крупном современном фреймворке) т.е. getc, getcc, getccc - неприемлимо. всякие изыски, - "а как бы все записать по-непривычнее в одну строчку", - тоже не рекомендуются, избыточные комментарии - не поощряются PHP: <?php // увеличиваем $i на единицу $i++
Padaboo Вероятно, тут имеется в виду то, что в Java называется JavaDoc. По-моему, в пхп это по анологии называется PHPDoc Тексты скриптов документируются специальным образом (с пом. коментариев), что потом простым нажатием кнопки генерится хтмл-документация. Для примера можешь глянуть, как оформлены сорцы ZendFramework, и сгенеренная на основе них документация. Очень удобно.
Попытка оправдать вторична. Первична, попытка направить разговор на обсуждение проблем логики. Хотя, возможно, я лишь хочу в это верить... В том вопрос: насколько данная ложка справляется с возложенными на нее задачами. Считая ложкой, сначала, само кеширование, а затем, весь шаблонизатор. Да я понял, что ответ ниже. =) Сложно доказать неговнокодность некачественного кода. Я лишь считаю что степень говнокодности этого кода не слишком велика. offtop: Я тоже сначала хотел написать "черпать"... Если ложкой можно зачерпнуть, но нельзя перенести и съесть, то зачем нам такая ложка. Кстати да, если можно перенести, но нельзя зачерпнуть... или можно зачерпнуть перенести, но нельзя съесть...
NotaBene: У слова "суть" есть deprecated значение - это глагол "быть" во множественном числе. Узнал об этом от преподавателя по вышке на первом курсе)
Это бесполезно, поскольку автору не нужно. У него Есть такая категория людей, которая любит сидеть в своем д...ме. И никогда не попытается взлететь из-за страха высоты. Если хочешь, можешь попробовать привести его код в надлежащий вид и сам увидишь ошибки в логике. Он ведь даже не понимает в чем проблемы. От сравнения степеней - увольте Ок, не черпать, а есть. Устроит?
Да блин. Переименовать методы или вынести конфигурацию в файл или задавать ее методами - это минута делов, че ты хотел чтобы я по твоему замечанию побежал это исправлять и постить заново? Меня интересовал алгоритм, т.к. сериализацию контента я пока не встречал, и сам в нем недочетов не нашел. По алгоритму высказались два человека, в обоих случаях (проверка большой вложености, сравнение с другим алгоритмом) проблем не выявилось. Или ты хочешь сказать, что щас перемиеную методы и уберу константы, и внезапно всплывут недочеты?
Действительно. Так кое-что виднее. Но знание того что ошибки там есть и сам процесс улучшения кода мне дали больше информации, чем улучшенный код. Только остается вопрос все ли я увидел, что увидел ты? Примерно так и происходит... Почему метод flush, по-разному выводит результат в файл и на экран?
Весь алгоритм это сериализация контента? Бгг... Говнокодеры, такие говнокодеры... Обязательно всплывут потому что они там есть. А если сам не увидишь, то обратись к Volt(220) он тебе подскажет. Ну или можешь еще флоппика помучать, может он добрый будет и объяснить тебе непутевому.
Честно говоря - это странно А вот это на самом деле важно. Поскольку даже попытка правильно и понятно назвать метод может подсказать что тут ошибка.