объекты и библиотеки

iceman

говнокодер
объекты и библиотеки

объясните в чем разница между объектом и библиотекой...

в от смысле использование $obj = new CLASS; и CLASS::func();

например класс для работы с ДБ

какая разница создам я в виде объекта или библиотеки...

для меня тут минус очевиден - если в виде объекта, в функциях приходится объявлять global $db;

вы люди опытные, может для вас есть различие!
--------------

так же не могу понять для чего нужны интерфейсы...

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

ну не понимаю...

-~{}~ 30.10.07 11:55:

пысы: всю ночь читал книгу С.А. Орлова "Технология разработки программного обеспечения (2-е издание - разработка сложных программных систем)" читал про ООП, но так не получил отеты на свои вапросы!
 

quad_4

Новичок
$obj - new Class; - ты создаешь объект класса, таких объектов может быть много и каждый со своими данными.
Class::func(); - это вызов статического метода класса, аналогичен вызову обычной функции, тоько эта лежит в этом классе.
Для работы с БД обычно используют синглтон - класс, объект которого нужен только один (когда идет генерирование страницы, тебе, как правило, нужно только 1 слединение с БД)
реализуется это тем, что конструктор класса делается приватным а объект создается в статическом методе этого класса и в нем же хранится статическая ссылка на созданный объект. Т.е. при вервом вызове объект создается (создается соединение с БД итд) а при следующих - возвращается ссылка на этот объект.
 

iceman

говнокодер
ужас, у тебя в голове каша
вот по этому я и написал здесь...

Для работы с БД обычно используют синглтон
буду читать про синглтон

$obj - new Class; - ты создаешь объект класса, таких объектов может быть много и каждый со своими данными.
везде примеры про фигуры, квадраты и круги...тут понять легко

но в пхп я не могу выделить объект... патому что никакие круги и квадраты не применяются при написание например CMS

тот же ббпарсер... толку делать его в виде объекта, если его используешь только для пред_парсирование текста например в бД и пост_парсирования из БД...
 

Crys

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

quad_4

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

Pigmeich

Новичок
quad_4
Второй раз за последний месяц спрашиваю: зачем вам сингелтон для доступа к ДБ понадобился?

iceman
Представь, что у тебя есть массив с данными на пользователя array('name' => 'vasya', 'fullName' => 'vasya pupkin', permission => 'allow all' ).

Ты захотел доставать права не из массива, а из БД, выбирая юзера по полному имени. Ты пишешь функцию RetrivePermission($userFullName) которая возвращает права.

Теперь ты вместо массива собираешь класс
Код:
class User{
public $name;
public $fullName;
public RetrivePermission();
}
И начинаешь получать права по вызову $user->RetrivePermission(). Теперь можно пркрутить ещё пару функций и массив с данными им передавать не надо - всё сложено в одном месте.

Так понятнее?
 

Alexandre

PHPПенсионер
объясните в чем разница между объектом и библиотекой...
в РНР нет библиотек (если под ними не понимаются функции кокого-либо расширения).
Под объектом в РНР понимается экземпляр класса.

-~{}~ 30.10.07 21:20:

в смысле использование $obj = new CLASS; и CLASS::func();
$obj = new CLASS; - динамическое размещение класса, т.е. осуществляется сюреализация экземпляра класса, а далее вызов метода класса $obj->func(); конкретного объекта.

CLASS::func(); - это статический вызов метода класса, без сюреализации класса в ввиде конкретного объекта.

-~{}~ 30.10.07 21:24:

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

HraKK

Мудак
Команда форума
выявится на уровне компиляции
Одна проблема... PHP не компелируемый язык)

-~{}~ 30.10.07 21:31:

тот же ббпарсер... толку делать его в виде объекта, если его используешь только для пред_парсирование текста например в бД и пост_парсирования из БД...
Потому что намного удобнее написать
parser::validate( $data , false);
..
parser::validate( $data , true);

И потом когда надо будет тебе изменить парсинг, не копать весь проект и изменять в каждой точке, а залесть в класс парсера и подправить.
 

kpp

Новичок
Объекты - это круто. Только недавно стал понимать реальное их назначение... точнее удобство их использования. Правда в Руби с этим делом лучше.
 

jonjonson

Охренеть
но в пхп я не могу выделить объект...
Если не можешь, значит не выделяй. ООП не догма.

патому что никакие круги и квадраты не применяются при написание например CMSтот же ббпарсер... толку делать его в виде объекта, если его используешь только для пред_парсирование текста например в бД и пост_парсирования из БД...
Ещё раз, если можешь обойтись без объекта, то обходись. Используй просто функцию для парсера. Она точно так же позволяет выделить общий код.

Кроме того, если объектами воспринимаешь только геометрические фигуры, а не например, запрос посетителя, ответ посетителю, сессию, какой либо элемент ответа, то это проблема твоего личного восприятия. Учебники об ООП не должны его расширять и изменять. Они описывают подход к решению определённых задач (в данном случае, разработки программного обеспечения). Таких подходов может быть более одного (ООП не панацея). Используй тот, который позволяет тебе достичь максимальной эффективности в твоей деятельности.
 

quad_4

Новичок
Автор оригинала: Pigmeich
Второй раз за последний месяц спрашиваю: зачем вам сингелтон для доступа к ДБ понадобился?
Затем что при выполнении скрипта мне нужно только 1 подключение к определенной БД. Если ты считаешь что у тебя есть более удобный метод работы с БД - расскажи. А я послушаю.
 

Pigmeich

Новичок
quad_4
Есть persistent connection.

А ещё есть такой момент, что скрипт редко подключается к БД по 10 раз на скрипт. Очень редко.

Возможно, использование снгелотона оправдано при большом колличестве библиотек, но для подключения к разным базам и под разными пользователями придётся шаманить с лишними классами.
 

quad_4

Новичок
шаманить не придется, сделать просто статический массив объектов, с ключами - DSN
а смысл синглтона в том, что не надо тащить за собой на протяжении всего скрипта глобальную переменную (ссылку на объект или connection resource).
pconnect не выход в данной ситуации
 

Alexandre

PHPПенсионер
выявится на уровне компиляции
Одна проблема... PHP не компелируемый язык)
есть первая ступень компиляции внешнего кода в байт код, далее работает интерпретируемая часть РНР, которая начинает выполнение байт кода. Но если так не нравится, то Можно сказать: на уровне анализа синтаксиса.
 

HraKK

Мудак
Команда форума
Alexandre
У тебя совершенно правельнный код только на мое ИМХО надо заменить
то это уже выявится на уровне интерпретации, а не на уровне исполнения.
 

iceman

говнокодер
Pigmeich

я че пишу что не понимаю что такое объект? я все это понимаю...

и разве это хорошо когда независимый объект Пользователь будет выводить данные из бд, это уже получается 2 проблемы... надо будет исползовать класс подключения к БД

а это уже нарушения принципа ООП... если использовать готовые функции ПХП для доступа к БД... то будет не очень удобно... особенно если ты пишешь CMS

Alexandre

ты плохо прочитал мою месагу...


Интерфейсы нужны для описания взаимодействия классов. Мы можем выделить некую абстракцию и описать ее как интерфейс. Класс, который реализует данный интерфейс - должен реализовать все методы данного интерфейса. Если какой-то метод не будет реализован, то это уже выявится на уровне компиляции, а не на уровне исполнения.
я заню что такое интерфейс, но зачем ег оприменять, для контроля кого или чего? самого себя, чтобы в будещем при написание нового класса похожих функции
не допускать ошибки? я правельно понимаю?

Потому что намного удобнее написать
parser::validate( $data , false);
..
parser::validate( $data , true);
я имел виду када писал, что для чего использовать в ввиде объекта ($obk = new PARSER;) если можно легче parser::pred_parse(); parser::post_parse();

Ещё раз, если можешь обойтись без объекта, то обходись. Используй просто функцию для парсера. Она точно так же позволяет выделить общий код.

Кроме того, если объектами воспринимаешь только геометрические фигуры, а не например, запрос посетителя, ответ посетителю, сессию, какой либо элемент ответа, то это проблема твоего личного восприятия. Учебники об ООП не должны его расширять и изменять. Они описывают подход к решению определённых задач (в данном случае, разработки программного обеспечения). Таких подходов может быть более одного (ООП не панацея). Используй тот, который позволяет тебе достичь максимальной эффективности в твоей деятельности.
учту! спс!

а вообще не понятно, как я уже выше говрил...

есть объект Пользователь, инфа хранится в БД... этому объекту нужно описовать сам процесс выборки из базы, или незнаю переложить на другой объект?

в случае CMS у меня тут в голове мысль возникла... есть класс ЯДРО.. сделать класс ДБ дочерним этього класса... а другие классы сделать дочерними КЛАССА ДБ...

но всеравно, независимость класса нарушается...
как написанно в ООП книжках... при написании класса все внимание должно уделится описанию объекта, а не думать о других проблемах... как вытащить инфу из БД и т.д.

шаманить не придется, сделать просто статический массив объектов, с ключами - DSN
а смысл синглтона в том, что не надо тащить за собой на протяжении всего скрипта глобальную переменную (ссылку на объект или connection resource).
pconnect не выход в данной ситуации
спс!
 
Сверху