Simpliest да сижу тут, на досуге, разрабатываю новый язык программирования ... ну или старый, если скрестить C++ и PHP UPD> фантазирую в общем
Работа, ну успел заметить как, в большинстве своём превратилась в повторении одних и тех конструкций для одних и тех же задач. Например Get/Set для полей объекта. Пару раз методы инстанирования полей объекта меня выручали ( нужно было переопределить поведение одного из потомков, переопределять основной рабочий метод нежелательно ). Но писать Get / Set каждый раз - накладно. Поэтому используем шаблоны в своём любимом редакторе, прописываем getset и получаем PHP: <? public function set{FieldName}(${FieldName}){ $this->${FieldName} = ${FieldName}; } public function get{FieldName}(){ return $this->${FieldName}; } Прописываем FieldName: PHP: <?php public function setName($name){ $this->name = $name; } public function getName(){ return $this->name; } Что на мой взгляд является той же чушью. Чушью господа обрастает код, чушью. Код (Text): <?neophp class GetSetExample { public getset $name; } // Что будет равносильно class GetSetExample { private $name; public function getName(){ return $this->name } public function setName($name){ $this->name = $name; } } Соответственно методы можно переопределить в наследниках в обоих вариантах
topas сделай неявные get/set как на мой взгляд это удобнее. Поскольку до тех пор пока метод не содержит никакой логики кроме тупого присваивания - смысла в нем 0. А методам добавь возможность аннотаций, которые будут указывать какое поле они обслуживают.
ты сказал то, что я пытался сформулировать на протяжении всего поста. Позволь переиначу: До тех пора, пока конструкция не содержит никакой логики кроме тупой реализации стандартных механизмов - смысла в конструкции 0. Спасибо за доверие, но на данном этапе это к сожалению шутка по сути получится тот же самый ненавистный кодогенератор, но на более низком уровне ( имхо ). Поэтому достаточно прописать чёткие правила (вот она, гибкость public getset $name - это getName() и setName() ну а если кому это не нравится, то он сможет написать "чушь": PHP: <?php class ConcreteExample extends Example { public function getName(){ return getMyName(); } private function getMyName(){ $name = parent::getName(); // ... return $name; } }
я уже пробовал выделить синглтон в отдельный класс http://www.php.ru/forum/viewtopic.php?t ... aa0027df97
Позволю. Но на самом деле один небольшой смысл есть - общий code style. Меня крайне вымораживают геттеры/сеттеры но в ZF все написано через них - и писать иначе это создать себе головняк в размерах пропорциональных размеру проекта. Поэтому кодогенераторы, стабы, и темплейты в IDE - жизненная необходимость.
Потому что при развитии кода, если тебе нужно будет например, менять значение переменных по более сложному принципу, или хотя бы ввести граничные проверки значения, в одном случае тебе нужно будет изменить сеттер/геттер - во втором - перелопатить весь проект, 10 раз ошибится, найти нестыковки.
вот и есть мечта, получить кодогенератор встроенный в ядро zend. Чтобы не лежало в папках, не плодилось. Не отвлекало внимаение. Каждая конкретная конструкция при интерпретации разворачивалась
я примерно раз в пол-года сталкиваюсь с полезностью get / set. Но количество сохраненного времени при этом может составлять до полумесяца в год Так что +1
На первой странице я постарался акцентировать внимание на том, что мне не важно, плоха или хороша данная конструкция. Меня больше интересует вопрос: почему стандартные конструкции приходится делать через кодогенераторы либо прописывать заново руками. Ведь можно упростить задачу несколько расширив язык
Чего вдруг? У PHP есть фантастическая возможность __get/__set И как результат геттеры и сеттеры будут вызываться для тех свойств для которых они явно определены. Пример?
http://www.php.ru/forum/viewtopic.php?p=201067#201067 http://www.php.ru/forum/viewtopic.php?p=201113#201113 http://www.php.ru/forum/viewtopic.php?p=201117#201117 Могу сформулировать причины появления "чуши" 1. Недостаточность конструкций. В результате то что можно описать одним-двумя словами растягивается на пять шесть и более слов. 2. Нет множественного наследования. В результате появление в коде делегирования, не всегда оправданного
C++, хороший пример C++ не такой высокоуровневый как php. Мне не нужна работа с памятью, процессором и прочее.
внимательнее, мне не нужна работа с памятью UPD> Извините, это я невнимателен UPD>> две опечатки в одном и том же месте, может быть мне действительно нужна эта работа? Где мой Ктулхку
Костян Речь про чушь, которую приходится писать либо кодогенерировать. Что по сути одно и то же, так как влияет на восприятие кода в целом.
Тогда без вариантов живем с тем что есть. Если проблему невозможно решить в текущий момент - нечего о ней заморачиваться.
"Если не можешь решить проблему, то измени отношение к ней" Но тут уже вопрос в другом. С юридической стороны: возможно ли сделать fork С технической стороны: а хватит ли силенок.