Зачем нужны классы в php?

D
На сайте с 29.01.2009
Offline
42
#31
nikitian:
Работают над проектом несколько человек (да и в случае одиночной разработки забыть можно что угодно) и они понятия не имеют кто какие глобальные переменные заюзал и могут их использовать многократно. Представляете какая путаница начнётся?

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

сегодня стал еще беднее
BoyStav
На сайте с 10.11.2006
Offline
182
#32
edogs:
Если у нас не 1 база, а 5, то мы обойдемся вполне 1 набором функций и 1 глобальной переменной. Если Вам для этого же без классов понадобится 5 наборов и 5 отдельных глобальных переменных, то вот это действительно быдлокодерство, и с таким подходом даже классы не помогут улучшить код.

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

edogs:

Мысль верная, но этот пример надуманный. Никто не мешает создать функцию, которая будет приводить объект в строковое представление, в зависимости от его типа. Фактически реализуя классы, Вы и создаете по одной функции на каждый тип объекта. Просто они разбросаны по разным классам, вместо того, что бы быть в одной функции.
А разницы в использовании между echo $db->toString и echo toString($db) на самом деле не много, согласны? И в обоих случаях разработчик может даже не знать, с каким классом работает.
То есть классы безусловно предоставляют удобство реализации некоторых вещей и стандартизацию их реализации, но не предоставляют практически ничего абсолютно уникального и нереализуемого через функции.

Пример не надуманный, а вполне себе реальный!

Хотел бы я посмотреть на производительность функции монстра!

edogs:

Именно так, Вы абсолютно верно уловили. Классы в php применительно к веб, это лишь некий стандартный способ реализации некоторых вещей, соглашений, способов раелизации чего-то. Фактически форма записи, что в принципе тоже полезно, а в больших проектах просто необходимо.
С технической точки зрения классы более ресурсоемки и у Вас появляется необходимость таскать за собой переменную-экземпляр постоянно ( $db->query($sql) покатит только если переменная откуда-то протащена, а для query($sql); можно и не таскать за собой этот хлам) или же привязываться насмерть к статическому имени класса (типа db::query()).
ООП без классов в php выглядит ничуть не хуже, а местами даже лучше. Да и работает побыстрее зачастую. За примером далеко ходить не надо - drupal тот же самый, думаем многие хотя бы слышали о нем.
[/QUERY]
зачет подчеркнул :)
ну поять возвращаясь к нашим баранам, как не тягая ничего за собой, сделать доступ к 5и ДБ?
query1() query2() query3()
однозначный зачет.
кстати за накладность классов тоже зачет, особенно их накладность будет заметна на фоне функций монстров с типозависимым поведением.

edogs:

Хотелось бы пояснить. Мы нисколько не против классов, и тем более ООП. Мы очень даже за. Но нужно выбирать использование классов по правильным, а не надуманным причинам. Мода на ООП к сожалению привнесла кучу надуманных аргументов в пользу использования классов в пхп. И если ориентироваться на эти аргументы, то получается жуткий код, в котором нет ничего ООП-шного и красивого и стройного.

о да, а структурное программирование привнесло столько понятного и простого!

я например с ужасом вспоминаю оскомерц, этот конгломерат тысяч функций, в котором наверняка даже авторы не разбираются.

BoyStav добавил 03.02.2009 в 01:46

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

самое настоящее ООП

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

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

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

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

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

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

Пишу на похапэ (/ru/forum/342374). Аудит скриптов. За деньги. Качественно.
D
На сайте с 29.01.2009
Offline
42
#34
asserte:
А состыкуется это примерно следующим: я как-то дописывал систему, в котором были глобальные переменные $CONFIG, $Config, $_Config, $_config... Ей-богу не вру. Вот как в такой каше разобраться? При учете, что кода кило на стописят, как минимум...

Ну запихните все настройки из базы в глобальный массив по такому принципу $CONFIG[тип настроек][переменная], это ж удобно. Можно дублировать в классы иногда $this->OPTIONS=$GLOBALS['OPTIONS'][тип], ничего в этом страшного я не вижу.

Или остались кодеры которые переменные типа кол-ва записей на страницу, порядок и поле сортировки по-умолчанию описывают в классах или подключают инклудом? По-моему это и называется "писать под себя".


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

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

xant
На сайте с 17.12.2008
Offline
65
#35

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

Эксклюзивные сайты и веб-2.0 приложения под ключ. Дорого.
A
На сайте с 16.11.2008
Offline
12
#36

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". Тут никто не спорит о том, какой подход лучше.. Скорее - как можно применять ;)

[Удален]
#37

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

T.R.O.N
На сайте с 18.05.2004
Offline
314
#38
U3RlcA==:
Оч хотелось бы получить ответ в виде списка основных преимуществ.

ТС, ощущение такое, что ВЫ пищите курсак или реферат на эту тему.

Классы, неважно в каком языке, это одна из основных частей ООП.

Основное удобство проявляется тогда, кода вы пишите большой программный продукт, который подрозумивает развите, переработку, дополнение или интеграцию с иным продуктом.

использование подобных механизмов в простоты, линейных алгоритмах - бессмыслено, т.к. ведет только к увеличению программного кода и затраты ресурсов на трансляцию/интерпритацию.

PS Если ВЫ не понимаете, зачем нужно ООП, значит Вы еще не приступаки к программ, которые это требуют.

От воздержания пока никто не умер. Хотя никто и не родился! Prototype.js был написан теми, кто не знает JavaScript, для тех, кто не знает JavaScript (Richard Cornford)
A
На сайте с 16.11.2008
Offline
12
#39
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

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

D
На сайте с 29.01.2009
Offline
42
#40
asserte:


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

Для каждого типа отдельный файл всмысле? Ну вот, допустим, есть у нас тип catalog (раз уж речь зашла о интернет-магазине). Что для него нам может потребоваться? Парсер БД-запросов, настройки продуктов, настройки каталога, корзина покупок... То есть один тип может затрагивать другие типы или подтипы, а кешировать их будем под каталогом. Оформление заказа - это уже другой файл с настройками.

Такой подход мне понятен, но правильно ли вы поняли ход мыслей ТС? Мне кажется что до такой организации он дойдет как минимум не сразу (раз только начал знакомство с классами), а поначалу, вероятно, может убивать время на ненужную работу.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий