- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу

Маркетинг для шоколадной фабрики. На 34% выше средний чек
Через устранение узких мест
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Работают над проектом несколько человек (да и в случае одиночной разработки забыть можно что угодно) и они понятия не имеют кто какие глобальные переменные заюзал и могут их использовать многократно. Представляете какая путаница начнётся?
Не совсем понимаю о чем вы. Что тут забывать? Как это состыкуется с тем, что я говорил про настройки?
Если у нас не 1 база, а 5, то мы обойдемся вполне 1 набором функций и 1 глобальной переменной. Если Вам для этого же без классов понадобится 5 наборов и 5 отдельных глобальных переменных, то вот это действительно быдлокодерство, и с таким подходом даже классы не помогут улучшить код.
Пример в студию, каким образом вы будете держать 5 открытых подключений в одной переменной!
Мысль верная, но этот пример надуманный. Никто не мешает создать функцию, которая будет приводить объект в строковое представление, в зависимости от его типа. Фактически реализуя классы, Вы и создаете по одной функции на каждый тип объекта. Просто они разбросаны по разным классам, вместо того, что бы быть в одной функции.
А разницы в использовании между echo $db->toString и echo toString($db) на самом деле не много, согласны? И в обоих случаях разработчик может даже не знать, с каким классом работает.
То есть классы безусловно предоставляют удобство реализации некоторых вещей и стандартизацию их реализации, но не предоставляют практически ничего абсолютно уникального и нереализуемого через функции.
Пример не надуманный, а вполне себе реальный!
Хотел бы я посмотреть на производительность функции монстра!
Именно так, Вы абсолютно верно уловили. Классы в php применительно к веб, это лишь некий стандартный способ реализации некоторых вещей, соглашений, способов раелизации чего-то. Фактически форма записи, что в принципе тоже полезно, а в больших проектах просто необходимо.
С технической точки зрения классы более ресурсоемки и у Вас появляется необходимость таскать за собой переменную-экземпляр постоянно ( $db->query($sql) покатит только если переменная откуда-то протащена, а для query($sql); можно и не таскать за собой этот хлам) или же привязываться насмерть к статическому имени класса (типа db::query()).
ООП без классов в php выглядит ничуть не хуже, а местами даже лучше. Да и работает побыстрее зачастую. За примером далеко ходить не надо - drupal тот же самый, думаем многие хотя бы слышали о нем.
[/QUERY]
зачет подчеркнул :)
ну поять возвращаясь к нашим баранам, как не тягая ничего за собой, сделать доступ к 5и ДБ?
query1() query2() query3()
однозначный зачет.
кстати за накладность классов тоже зачет, особенно их накладность будет заметна на фоне функций монстров с типозависимым поведением.
Хотелось бы пояснить. Мы нисколько не против классов, и тем более ООП. Мы очень даже за. Но нужно выбирать использование классов по правильным, а не надуманным причинам. Мода на ООП к сожалению привнесла кучу надуманных аргументов в пользу использования классов в пхп. И если ориентироваться на эти аргументы, то получается жуткий код, в котором нет ничего ООП-шного и красивого и стройного.
о да, а структурное программирование привнесло столько понятного и простого!
я например с ужасом вспоминаю оскомерц, этот конгломерат тысяч функций, в котором наверняка даже авторы не разбираются.
BoyStav добавил 03.02.2009 в 01:46
asserte, имхо, синглтон - это не тру ооп
самое настоящее ООП
Не совсем понимаю о чем вы. Что тут забывать? Как это состыкуется с тем, что я говорил про настройки?
А состыкуется это примерно следующим: я как-то дописывал систему, в котором были глобальные переменные $CONFIG, $Config, $_Config, $_config... Ей-богу не вру. Вот как в такой каше разобраться? При учете, что кода кило на стописят, как минимум...
Спорим, не обойдется без массива? =)
Самое страшное заключается в том, что мощнейшую волну быдлокода нужно ожидать с выходом шестерки... Ой чего с неймспейсами и лямбдами будут творить - даже представить страшно (
Один из вариантов развития - использование неймспейсов в качестве оболочки для функций (читай - "альтернативы" статическим классам). Вот когда нужно будет показывать уличную магию, чтобы понять как это работает :-D
А состыкуется это примерно следующим: я как-то дописывал систему, в котором были глобальные переменные $CONFIG, $Config, $_Config, $_config... Ей-богу не вру. Вот как в такой каше разобраться? При учете, что кода кило на стописят, как минимум...
Ну запихните все настройки из базы в глобальный массив по такому принципу $CONFIG[тип настроек][переменная], это ж удобно. Можно дублировать в классы иногда $this->OPTIONS=$GLOBALS['OPTIONS'][тип], ничего в этом страшного я не вижу.
Или остались кодеры которые переменные типа кол-ва записей на страницу, порядок и поле сортировки по-умолчанию описывают в классах или подключают инклудом? По-моему это и называется "писать под себя".
Самое страшное заключается в том, что мощнейшую волну быдлокода нужно ожидать с выходом шестерки... Ой чего с неймспейсами и лямбдами будут творить - даже представить страшно (
Быдлокодеры не любят новшеств, многие даже PHP5 толком не освоили, ссылаясь на то, что на многих хостингах поддержки PHP5 нет. С появлением шестерки многие перейдут на пятый только лишь.
Интересный топег, только не сказано самого главного. Для каждой ситуации - свои методы. Если вам просто нужно вставить чуть-чуть динамики в уже готовую HTML страницу - никакой ООП там не нужен.
Devider, я все-равно не понимаю, нахрена костыли...
Не проще сделать так:
Чем полезен такой подход:
При serialize(Dispatcher::getInstance()) можно и нужно проверять типы объектов, хранимых внутри. Ложить все конфиги в единый файл (почти нативное кеширование получается). При wakeup - просто заполнять объект данными из массива.
В случае с глобальным конфигом - нужно еще понимать, что у тебя в глобальной перменной можно кешировать, а что нет... Как понять? На уровне объектов - все просто:
Финита
-------------
Интересный топег, только не сказано самого главного. Для каждой ситуации - свои методы. Если вам просто нужно вставить чуть-чуть динамики в уже готовую HTML страницу - никакой ООП там не нужен.
Название топика, если что: "Зачем нужны классы в php". Тут никто не спорит о том, какой подход лучше.. Скорее - как можно применять ;)
для конфигов столько е**и. мазохисты рулят видимо. имхо все это ООП ради ООП.
Оч хотелось бы получить ответ в виде списка основных преимуществ.
ТС, ощущение такое, что ВЫ пищите курсак или реферат на эту тему.
Классы, неважно в каком языке, это одна из основных частей ООП.
Основное удобство проявляется тогда, кода вы пишите большой программный продукт, который подрозумивает развите, переработку, дополнение или интеграцию с иным продуктом.
использование подобных механизмов в простоты, линейных алгоритмах - бессмыслено, т.к. ведет только к увеличению программного кода и затраты ресурсов на трансляцию/интерпритацию.
PS Если ВЫ не понимаете, зачем нужно ООП, значит Вы еще не приступаки к программ, которые это требуют.
для конфигов столько е**и. мазохисты рулят видимо. имхо все это ООП ради ООП.
Напомнило "Я пони. Обоснуйте". Доказать можете, что ооп здесь не нужен? Чтобы вас уверовать в жизнь - приведу пример своей реализации системы конфигурации:
A_ConfgInterface - интерфейс
A_ConfigAPI - Адаптер для работы с конфигами
A_ConfigFabricanto - фабрика объектов конфига.
Приступим? =)
Что получили?
1. Стандартный интерфейс работы с конфигурацией в системе. Не нужно помнить как работает система конфигурирования в ядре, а как - в приложении
2. Стандартный интерфейс для хранения и кеширования конфигураций
3. Стандартный интерфейс доступа к конфигам
4. Расширяемость за счет фабрики (XML/YAML/FTP/Oracle...)
5. Центральный валидатор конфигураций - A_ConfigAPI
Могу долго так продолжать... А в процедурном секса нас ждет, чтобы такое реализовать - мама не горюй (
Чем полезен такой подход:
При serialize(Dispatcher::getInstance()) можно и нужно проверять типы объектов, хранимых внутри. Ложить все конфиги в единый файл (почти нативное кеширование получается). При wakeup - просто заполнять объект данными из массива.
Для каждого типа отдельный файл всмысле? Ну вот, допустим, есть у нас тип catalog (раз уж речь зашла о интернет-магазине). Что для него нам может потребоваться? Парсер БД-запросов, настройки продуктов, настройки каталога, корзина покупок... То есть один тип может затрагивать другие типы или подтипы, а кешировать их будем под каталогом. Оформление заказа - это уже другой файл с настройками.
Такой подход мне понятен, но правильно ли вы поняли ход мыслей ТС? Мне кажется что до такой организации он дойдет как минимум не сразу (раз только начал знакомство с классами), а поначалу, вероятно, может убивать время на ненужную работу.