Плохого тут много. А именно наличие геморроя с наследованием от несвязанного объекта. Суть наследования, не только и не столько стремление убрать "лишний" код, а в контроль за характеристиками и поведением. Унаследовать ежа от ужа в теории можно, но не нужно. Наследовать Синглтон - суть которого в наличии только себя любимого - это ахинея У тебя и получилась помесь бульдога с носорогом. Ты фактически реализовал Builder, но не Singleton Не пытайся избавится от избыточности кода. KISS - делай это просто, но не проще. важнее чем DRY - не повторяй самого себя. Для облегчения работы лучше использовать кодогенерацию, благо php позволяет это сделать даже в runtime в отличии от других языков.
Маленькое замечание. Чтобы не путаться потом с множественными окончаниями и опечатками в коде, лучше делать User, UserList, UserCollection
Это из раздела метапрограммирования Например, есть некоторый набор методов и свойств. Есть ряд правил. И БД произвольной формы настраиваемой пользователем. Программа как таковая не пишется. Пишется кодогенератор, который уже и создает выполняемый код. К кодогенерации относится и создание стабов (stubs) на основе WSDL файлов для SOAP сервисов.
Да, да. Вы правы. А еще Singleton, Delegate, Factory, Registry - все это такой бред... То ли дело, старое доброе процедурное программирование.
Это ваше право. При работе с домашними страницами, блогами и шаблонными магащзинами кодогенерация практически не нужна. С более сложными задачами работают не так часто.
SOAP сервис интеграции с netsuite Вперед, ручками. https://webservices.netsuite.com/wsdl/v ... suite.wsdl
читать не буду. Я понял, что мы друг друга не поняли. Мир, дружба, жвачка. Кос. Все, можешь продолжать свою тему )))))
продолжаю. Прошлая реализация get_called_class для PHP < 5.3.0 оказалась не подходящей для множественного такого наследования. PHP: <?php if (!function_exists('get_called_class')) { function get_called_class() { $bt = debug_backtrace(); $l = 0; do { $l++; $lines = file($bt[$l]['file']); $callerLine = $lines[$bt[$l]['line']-1]; preg_match('/([a-zA-Z0-9\_]+)::'.$bt[$l]['function'].'/', $callerLine, $matches); if ($matches[1] == 'self') { $line = $bt[$l]['line']-1; while ($line > 0 && strpos($lines[$line], 'class') === false) { $line--; } preg_match('/class[\s]+(.+?)[\s]+/si', $lines[$line], $matches); } } while ($matches[1] == 'parent' && $matches[1]); return $matches[1]; } } эта вроде работает. Из комментов php.net.
Тебя радует что не один дурак, а два? Я думаю, если ты пообщаешься с Fabien Potencier он тебе объяснит недостатки приведенного варианта. Посмотри лучше в сторону Phemto, не факт что его возможности дадут тебе реализовать синглтоны, но это лучше чем множественное наследование.
ну не то, что б радует, греет душу) да он за 3-5 слайдов до этого писал, что синглтон плохо. Спору нет. Я не стою на месте. Теперь смотрю в сторону какой-то извращенной фабрики, которая могла б контролировать кол-во инстанций класса, возможно хранила бы настройки (реестр?), и в обход нее нельзя было б создать инстанцию. Вот ну не всегда DI удобно использовать (лично мне). В каких-нить либах типа Twig, Zend_Mail - да, это офигенски. А внутри своих каких-нить модулей - нет. Потом на примере велосипедных библиотек покажу, что именно мне не удобно.