Метка: ООП

Недостатки laravel

Я очень люблю фреймворк laravel, пользуюсь им начиная с 3-й версии, тогда он был как глоток свежего воздуха на фоне zend и symfony. Уважаю Тейлора за проделанную работу, за принесённую в php фреймворки идею удобного апи и умение копировать лучшее из других фреймворков вроде RoR. О плюсах сказано уже много, но у него есть свои недостатки. Эти недостатки не фатальны, а некоторые и вовсе мои личные привычки, которые другим покажутся надуманными. Всё дерьмо вылитое ниже не сильно влияет на мою оценку laravel, который считаю лучшим фреймворком в мире PHP. И спасибо @kotchuprik и его статье, который подтолкнул высказаться и дал некоторые идеи.

Читать далее »

Паттерн Decorator

В больших проектах, особенно где ядро должно оставаться стабильным зачастую требуется изменения поведения объекта рантайм без дописывания кода в сам класс. Есть несколько вариантов, в этот раз я продемонстрирую паттерн Decorator (декоратор, wrapper, обёртка). Нам довелось активно использовать сей паттерн при разработке проета для IBM на базе Sugar CRM. В шуге заложено много гибкости, но некоторые части написаны очень очень давно и наружу торчит только Bean, который мы и декорировали чтобы добавить функционал или подменить стандартную реализацию. К сожалению, это не стало серебряной пулей и нам довелось хлебать кислые щи дырявой оловянной ложкой.

Читать далее »

Класс запроса — Request

В прошлый раз мы составляли список хотелок и среди них было ЧПУ. О человекопонятных урлах я так же начинал писать чуть ранее и приводил пример своего видения .htaccess правила для mod_rewrite, сейчас повтору его с некоторой поправкой связанной с моим просвящением в области SEO. RewriteEngine on RewriteRule !^(p/|favicon\.ico|robots\.txt|sitemap\.xml|sitemap\.xml\.tgz) index.php [L] Теперь мы будем перенаправлять на index.php всё, кроме запросов в папку p(публичную), и на файлы favicon.ico, robots.txt, sitemap.xml. Теперь мы стали более дружественными к поисковикам и брат seoшник не будет нас проклинать.

Читать далее »

Типизация в php

Многие, наверное уже и не помнят какие холивары возникали по поводу недоООПешности php. Зачастую спорщики просто не знали о возможностях языка, другие судили по версии 3-4. Но вот уже появились нэймспэйсы, замыкания, лямбда функции кое как сделанные. Ещё одной проблемой виделась отсутствие строгой типизации. Особого смысла я в ней не вижу и, как показала практика, у не строго типизированных языков в вебе преимущества. Но всё же поговорим об этом.

Читать далее »

Смешиваем singleton и registry

Основное достоинство Одиночки одновременно является и его недостатком. Допустим у нас есть класс для работы с базой данных реализованный на singleton (о ужОс, нужно было хотя бы фабрику). Всё замечательно работает, пока в один непогожий день мы не придумываем держать данные в разных базах на разных серверах. Ну и этого геморроя нам мало, поэтому от возможностей мускула мы отказываемся. И приплыли… Соединение у нас то ОДНО. Отказываться от singleton и перелопачивать тонны кода тоже не с руки, значим поставим костыль.

Читать далее »

Компания microsoft открыла код MVC фреймворка для ASP.NET

К этому они шли очень долго, но никто не ждал такого финиша. Первые креативные мысли по созданию своей реализации MVC появились у разработчиков ещё в 2007 году, затем вышло несколько версий — превью, беты, релиз кандидаты. Но лишь в марте 2009 года состоялся настоящий релиз. Если релиза ждали многие, то вот о том что это будет ещё не самая важная новость, догадывалось нороду мало. Недавно было объявлено, что фреймворк является открытым и распостраняется под открытой лицензией MS-PL. Меня не прильщает ASP.NET, но посмотреть в исходники от корпорации тьмы я всё же решил, чего и другим советую. Качать здесь. Ну и немного оффтопа. Microsoft превратилась в красную тряпку для многих айтишников, а быки как известно — дальтоники, им плевать на что бросаться. Не уподобляйтесь им, не всё творимое «чёрной» компанией является плохим. И от просмотра кода или знакомства с их продуктами Вы не превратитесь мгновенно в зомби.

Читать далее »

Константы

Наблюдаю за разработкой тикет системы на CI и заметил странность данного фреймворка, в нём ОЧЕНЬ много мест, где нужно параметром передавать текстовую строку. Мой совет относится не только к CI но и к остальным проектам. Используйте константы Что это нам даёт: 1.  Зачиту от опечаток, если у вас включены ошибки типа E_NOTICE. $this->config(DB_USER); $_CONFIG[DB_USER] 2. Удобный автокомплит. 3. Используя эмуляцию нэймспэйсов, не нужно запоминать кучу лишней информации. DB_*, PAGE_*. 4. Не забываем что и у классов есть константы MyClass::FETCH_ASSOCи теперь ваш класс будет прозрачен для пользователей.

Читать далее »

SPL в PHP: ArrayObject

Довольно неожиданно пришла идея довести начатый шаблонизатор до юзабельного вида, дописал хелперы, встроил кеширование, решил прицепить хелпер для формы. И здесь мне стало нехватать ООП стиля. Накидав кой-чего понял что вначале нужно написать цикл статей о SPL (Стандартной PHP библиотеке). Эта штука очень полезна при ООП стиле кодирования, а особо нормальных статей об SPL на русском я не обнаружил. Начнёмс. ArrayObject — предназначен для того, чтобы объект вёл себя как массив, даёт доступ к данным через квадратные скобки и позволяет делать foreach ArrayObject implements IteratorAggregate , Traversable , ArrayAccess , Countable { /* Methods */ ArrayObject::__construct ( mixed $input ) void ArrayObject::append ( mixed $newval ) int ArrayObject::count ( void ) ArrayIterator ArrayObject::getIterator ( void ) bool ArrayObject::offsetExists ( mixed $index ) mixed ArrayObject::offsetGet ( mixed $index ) void ArrayObject::offsetSet ( mixed $index , mixed $newval ) void ArrayObject::offsetUnset ( mixed $index ) } Данный класс имплементирует интерфейсы IteratorAggregate , Traversable , ArrayAccess , Countable IteratorAggregate , Traversable — отвечают за гуляние по объекту, соответственно нужно реализовать метод getIterator. Эти вещи будем разбирать в другой раз. Countable — нужно реализовать интерфейс для получения размера count. ArrayAccess — это  квадратные скобочки — проверка существования offsetExists, получение значения — offsetGet, присвоение значения — offsetSet, уничтожение элемента — offsetUnset и добавление элемента — append. Со скучной теорией покончено, сейчас практика class Amdy_Array extends ArrayObject { protected $array; public function __construct($array) { $this->array = $array; } public function append($value) { $this->array[] = $value; } function offsetSet($key, $value) { if ($key) { $this->array[$key] = $value; } else { $this->array[] = $value; } } function offsetGet($key) { if ( array_key_exists($key, $this->array) ) { return $this->array[$key]; } } function offsetUnset($key) { if ( array_key_exists($key, $this->array) ) { unset($this->array[$key]); } } function offsetExists($offset) { return array_key_exists($offset, $this->array); } public function dump() { var_dump($this->array); } } Так мы побыстрому создали свой обработчик, унаследовав класс из SPL. Что же там происходит. В конструктор передаётся сам массив, его можно передать и позже, но не важно. Данный массив мы загоняем во внутреннюю переменную $this->array, дальше, мы описываем,  как должны обрабатываться запросы к объекту как к массиву. Т.е. все запросы будут реально относиться в переменно $this->array. Можно и вовсе не заводить эту переменную, а работать с атрибутами класса, если в коде заменить $this->array, на get_class_vars($this), $this->{$k} и т.д. Простой пример использования. $array = new Amdy_Array( array( ‘test’, ‘test1’ => array(0,1,2,3), 2, ‘test4’ => ‘test2 value’ ) ); $array[] = ‘test2222’; echo $array[0] . ‘<hr/>’; echo $array[‘test4’] . ‘<hr/>’; $array->dump(); PHP не стоит на месте, потому, кое-что уже изменилось, постоянно добавляются новые классы, методы и интерфейсы, чтобы не изобретать свои велосипеды.

Читать далее »

Flash сообщения 2

Как и обещал, вернулся к flash сообщениям. Переделаем его на статические методы. Итак, немножко теории. Статические методы могут вызываться без создания экземпляра класса (объекта), при объявлении метода указывается ключевое слово static. Точно так же объявляется и статический атрибут класса.

Читать далее »

Свой шаблонизатор 2

В первой части мы по всем правилам ООП создали шаблонизатор, теперь наростим его мощь, будем делать это двумя способами: Расширая класс Amdy_Templater С помощью классов-помощников.

Читать далее »