asserte

Рейтинг
12
Регистрация
16.11.2008

Или копать в сторону zlib из phpMyAdmin - самый простой путь. И юзается во многих приложениях...

А еще можно использовать exec (если хостер позволяет ;))

bearman:
...что можно реально НАСЛЕДОВАТЬ, ФАБРИКОВАТЬ в сайтостроении? в голову приходят только вещи вида адаптер для доступа к бд, больше с лету ничего припомнить не могу ... конечно все зависит от архитектуры вебприложения/сайта, ООП повышает хакоустойчивость сайтов имхо.

Примеры? Пожалуй, TreeStructure - как пример. Добавление/удаление Items/Nodes (одинаковые методы - только вот разные таблицы, которые можно переопределить при наследовании). Сюда попадают все нециклические деревья: категории/статьи, категории/картинки, категории/видео и т.д... Вот вам и наследование... =)

netwind:

Довольно удачно в этом смысле построен vbulletin :
Все важные интерфейсы обернуты в классы, но сами странички в процедурном стиле. Поэтому расширения растут как на дрожжах. Там и разбираться то особо не надо: ищи похожее расширение и копируй вызовы объектов.

Аха, и количество функций растет, перекрывая десятки раз то, что уже было написано. Где же оптимальность процедурного подхода?

Впрочем, холливар =)

Интересно конечно, но API для своего кода, я так понимаю - нельзя посмотреть, ибо CORE закрыт.

ЗЫ: а что такое

$_SESSION['password']=='d41d8cd98f00b204e9800998ecf8427e' ? '' : $_SESSION['password']

В CUser::authenticate() ? :-D

После этого ВТРОЙНЕ интересно, почему код закрыт. Чесслово... Странные штучки-дрючки )

netwind:
asserte, тут одни уже доабстрагировались.
Жил был себе такой проект gallery2 и являлся лучшим в своей нише по набору фич. Недавно он объявил о закрытии старой ветки и переписывании с нуля : http://gallery.menalto.com/gallery_3_begins

А разгадка одна - увлечение ООП. Структура настолько сложна, что новичок не может написать дополнение или расширение. Такой GPL проект развиваться быстро не сможет. И, тормозит он, кстати, дай дорогу ( посмотрите wishlist).

Тормозит он дико из-за неверной архитектуры БД. Можете посмотреть на досуге - сам сталкивался. А еще не забываем о том, что он с графикой работает - это ресурсоемкие операции. (если мы про админко и операции с изображениями).

Насчет расширений... А вот тут уже вопрос не ООПрограммирования и не ООПроектирования. Тут архитектурное проектирование задействовано.

Я что-то очень сомневаюсь, что они на процедурном напишут =)

А по теме "доабстрагировались" - не означает, что на каждую сущность системы надо по 20 оберток писать. Я к адаптерной системе в 2 обертки пришел. Ничего - шустренько работают системы (профайлинг показывает, что основные 90% - это СУБД). Не стоит говорить о ООП как о сильно тормозящем системы подходе. Системы можно тормозить еще и циклами :)

Devider, Снова вы на конкретные реализации привязываетесь... Вам ли не все равно, как будут кешироваться конфиги: пофайлово, поштучно или вообще генериться в нативный php-код? )

Учитесь абстрагироваться от кода - это для меня важнейшее качество ООП-подхода. Почитайте банду четырех - вообще летать будете, когда начнете применять паттерны ;)

bearman:
для конфигов столько е**и. мазохисты рулят видимо. имхо все это ООП ради ООП.

Напомнило "Я пони. Обоснуйте". Доказать можете, что ооп здесь не нужен? Чтобы вас уверовать в жизнь - приведу пример своей реализации системы конфигурации:

A_ConfgInterface - интерфейс

A_ConfigAPI - Адаптер для работы с конфигами

A_ConfigFabricanto - фабрика объектов конфига.

Приступим? =)


<?php
$Config = new A_ConfigAPI();

$Config->extract('configName', 'database', 'tablename'); // АPI запускает фабрику объектов с сигналом 'database', просматривая перед этим наличие кеша. Ложит в свой стек имя полученого конфига, регистрирует в диспетчере
$Config->extract('configName2', 'fs', 'app::configs::users'); // То же самое. Только фабрика инстанциирует другой объект работы с конфигом, который так же имплементирует A_ConfigInterface

$singleConfig = $Config->get('configName');
$allConfigs = $Config->getMerged('configName', 'configName2', 'confgName3',...);
$Config->cache($allConfigs);

Что получили?

1. Стандартный интерфейс работы с конфигурацией в системе. Не нужно помнить как работает система конфигурирования в ядре, а как - в приложении

2. Стандартный интерфейс для хранения и кеширования конфигураций

3. Стандартный интерфейс доступа к конфигам

4. Расширяемость за счет фабрики (XML/YAML/FTP/Oracle...)

5. Центральный валидатор конфигураций - A_ConfigAPI

Могу долго так продолжать... А в процедурном секса нас ждет, чтобы такое реализовать - мама не горюй (

Devider, я все-равно не понимаю, нахрена костыли...

Не проще сделать так:

<?php
// На этапе инициализации
$UserConfig = new ConfigObject();
Dispacher::registerObject($UserConfig, 'userConfig');

$UserConfig->setSource('database', 'configTable');
$UserConfig->read();


// На этапе использования, где-нибудь в классе Users
$this->_configs = Dispatcher::getObject('userConfig');
// Все, готово к использованию. Улыбаемся и машем машем и улыбаемся

Чем полезен такой подход:

При serialize(Dispatcher::getInstance()) можно и нужно проверять типы объектов, хранимых внутри. Ложить все конфиги в единый файл (почти нативное кеширование получается). При wakeup - просто заполнять объект данными из массива.

В случае с глобальным конфигом - нужно еще понимать, что у тебя в глобальной перменной можно кешировать, а что нет... Как понять? На уровне объектов - все просто:


<?php

if( $object implements Serializable &&
$object->cacheEnabled()) {
serialize($this->_data['userConfig']); // __sleep, разумеется
}

Финита

-------------

xant:
Интересный топег, только не сказано самого главного. Для каждой ситуации - свои методы. Если вам просто нужно вставить чуть-чуть динамики в уже готовую HTML страницу - никакой ООП там не нужен.

Название топика, если что: "Зачем нужны классы в php". Тут никто не спорит о том, какой подход лучше.. Скорее - как можно применять ;)

Devider:
Не совсем понимаю о чем вы. Что тут забывать? Как это состыкуется с тем, что я говорил про настройки?

А состыкуется это примерно следующим: я как-то дописывал систему, в котором были глобальные переменные $CONFIG, $Config, $_Config, $_config... Ей-богу не вру. Вот как в такой каше разобраться? При учете, что кода кило на стописят, как минимум...

Пример в студию, каким образом вы будете держать 5 открытых подключений в одной переменной!

Спорим, не обойдется без массива? =)

Самое страшное заключается в том, что мощнейшую волну быдлокода нужно ожидать с выходом шестерки... Ой чего с неймспейсами и лямбдами будут творить - даже представить страшно (

Один из вариантов развития - использование неймспейсов в качестве оболочки для функций (читай - "альтернативы" статическим классам). Вот когда нужно будет показывать уличную магию, чтобы понять как это работает :-D

MOP1:
asserte, имхо, синглтон - это не тру ооп

Что значит "тру"? ООП - он или есть, или его нет. Если нужно гарантировать один экземпляр класса - чем не путь? Земеттье, я употребляю исконно "ООП-термины". А как насчет геттеров/сеттеров? Они не нарушают Ъ концепции? Ведь данные в итоге оказываются "вне объекта". Тоже не Ъ? Другое дело - использование мощи ООП или пародия "для удобства".

Если уж на то пошло - ткну в противоречие между наследованием и инкапсуляцией. Слышали о таком? =)

UPD: что-то на ум упало... А ведь 99% разрабов начинают использовать классы и объекты как "контейнеры" для функций. Чтобы с именованием не путаться... Надо опрос устроить - сколько человек так начало свой путь к ООП ;)

Всего: 200