![]() ![]() ![]()
Какой рейтинг вас больше интересует?
|
Главная /
Каталог блоговCтраница блогера Хабрахабр: PHP / Блог / Захабренные/Записи в блоге |
![]() |
Хабрахабр: PHP / Блог / Захабренные
Голосов: 1 Адрес блога: http://habrahabr.ru/blog/php/ Добавлен: 2008-06-12 19:52:35 блограйдером ZaiSL |
KodiCMS — CMS на Kohana framework
2014-10-17 01:29:14 (читать в оригинале)Всем привет, на Хабре уже вот как 6 лет и только сейчас решился написать свой первый пост, хотя до сих пор не уверен что это хорошая идея :)
Предисловие
Уже более 6 лет я занимаюсь разработкой web приложений, начинал с верстки, javascript, php, python и т.д., в общем за все время я прошел все этапы создания сайта от дизайна в фотошопе и заканчивая созданием полноценного сайта.
Краткий рассказ о том как я разрабатывал CMS
Еще одна коробочная CMS — знакомство с FFCMS
2014-10-16 18:21:40 (читать в оригинале)
Дисклеймер: я не претендую на звание разработчика «инновационной системы» и я ничего не продаю, а лишь хочу представить открытую систему управления сайтом, которая возможно упростит жизнь разработчику и веб-мастеру. Система не основана на каком-либо популярном фреймворке — реализованы лишь минимальные методы для взаимодействия между расширениями, роутингом и шаблонными представлениями.
Читать дальше →
[Перевод] Методы в примитивных типах PHP
2014-10-16 13:26:20 (читать в оригинале)Некоторое время назад назад Энтони Феррара выразил мысли по поводу будущего PHP. Соглашусь с большинством его взглядов, но не со всеми. В статье я остановлюсь на одном конкретном аспекте: преобразования примитивных типов данных, таких как строки или массивы, в “псевдо-объекты”, позволяя выполнять в них вызовы методов.
Начнем с нескольких примеров:
$str = "test foo bar";
$str->length(); // == strlen($str) == 12
$str->indexOf("foo") // == strpos($str, "foo") == 5
$str->split(" ") // == explode(" ", $str) == ["test", "foo", "bar"]
$str->slice(4, 3) // == substr($str, 4, 3) == "foo"
$array = ["test", "foo", "bar"];
$array->length() // == count($array) == 3
$array->join(" ") // == implode(" ", $array) == "test foo bar"
$array->slice(1, 2) // == array_slice($array, 1, 2) == ["foo", "bar"]
$array->flip() // == array_flip($array) == ["test" => 0, "foo" => 1, "bar" => 2]
Здесь
$str
— это обычная строка и $array
является простым массивом — они не объекты. Мы просто даем им немного объектного поведения, позволяя вызывать в них методы.Обратите внимание, такое поведение совсем не за горами. Это уже не сон, кое-что уже существует прямо сейчас. PHP расширение scalar objects позволяет определить методы для примитивных типов.
Читать дальше →
ZExt Framework :: Работа с MongoDB
2014-10-16 07:37:40 (читать в оригинале)Здравствуй Хабрасообщество!
Сегодня я хочу рассказать о полезной возможности фреймворка «ZExt»: работе с базой данных MongoDB.
Рассматриваемая ниже связка модулей, даёт возможность работать с вызовами к Mongo в стиле query builder-а знакомым многим по различным SQL-ORM.
Давайте рассмотрим простой пример в качестве вступления:
use ZExt\Datagate\MongoCollection;
class ProductsDatagate extends MongoCollection {
public function getProductsByManager(array $managerId, $minPrice = null) {
$query = $this->query()
->where('managerId IN(?)', $managerId)
->where('enabled = ?', true);
if ($minPrice !== null) {
$query->where('price >= ?', $minPrice);
}
return $query->find();
}
}
Читать дальше →
Использование паттерна Proxy для организации кэширования на PHP
2014-10-16 00:00:09 (читать в оригинале)Постановка задачи. Имеется действующий отлаженный проект на PHP, содержащий десяток моделей, в каждой из которых по 5 методов выборок данных. Проект растет, всё хорошо, но в определенный момент, под тяжестью нагрузки, назревает необходимость добавить каким-то образом кэширование обращений к моделям.
Возможные решения.
Первый способ «в лоб»: в каждый метод модели добавляем кэширование по стандартной схеме: проверить кэш, если есть актуальные данные, возвращаем их, если нет — выполняем метод, как было до этого и плюс в конце еще пишем, полученные из базы, данные в кэш. Сказать, что это ужасный способ значит, ничего не сказать, поэтому просто скажу, почему это плохо:
- Нарушается один из принципов SOLID, «код должен быть открыт для расширения, но закрыт для изменений», т.е. мы берем и ломаем уже отлаженный выпущенный в продакшн код для того, чтобы добавить новую функциональность, а это всегда вызывает шквал ошибок и как следствие недовольство пользователей и заказчика.
- В одном и том же коде смешивается логика получения данных и кэширование, что приводит к распуханию классов и беспощадному повторению кода.
- Сделав так, мы лишаемся возможности получить живые данные в обход кэша (следующим шагом будет добавление флага $nocache).
- Очень высокая трудоёмкость впиливания кэширования таким способом и ещё большая трудоёмкость выпиливания его потом.
Второй способ, «расширяем классы моделей»: добавляем в модели методы-дублеры, которые оборачивают вызовы существующих методов в кэширование, например findById_Cached().
Вроде бы лучше, существующие методы не трогаем, вместо этого добавляем новые. Но остальные минусы на месте:
- Смешивание логики.
- Размеры классов растут ещё больше, чем в предыдущем способе.
- Очень высокая трудоемкость (добавить 50 новых методов, в нашем примере) + заменить везде в приложении вызовы старых методов, на новые, а если в будущем придется кэширование выпиливать, то еще и повторить все действия назад.
Третий способ «кэширующий прокси», очень простое и быстрое решение, поражающее своим изяществом и скоростью внедрения. Как его сделать – смотрим код.
Читать дальше →



Категория «Наблюдения»
Взлеты Топ 5
![]() | ||
+1482 |
1510 |
Juri13139 |
+1449 |
1484 |
Elen_i_rebyata |
+1430 |
1508 |
Дрочливый_Драчун |
+1419 |
1505 |
Малти_Ошер |
+1349 |
1590 |
@дневники: ~ Mikeko ~ - Пусть все думают, что было так! :) |
Падения Топ 5
![]() | ||
-3 |
1184 |
Сайт визажиста Мокровой Инны блог |
-5 |
1434 |
Экспериментальный блог |
-7 |
5 |
afrika-abr |
-7 |
85 |
Народные методы, средства, способы лечения. |
-8 |
41 |
Elephant_Talk |

Популярные за сутки
Загрузка...

BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.
взяты из открытых общедоступных источников и являются собственностью их авторов.