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

U3RlcA==
На сайте с 01.02.2009
Offline
30
16134

Вопрос возможно нубовский, но суть в чем? Прочитал про классы в php, вроде понял для себя, что такое объекты класса и его методы, но не нашел ответа на более важный для себя вопрос - для чего они нужны и в чем основные преимущества в их использовании? В программировании новичек, что такое ф-ции и переменные в курсе, объекты и методы оч похожи на них, но все равно не вижу преимуществ пока, хотя знаю, что они должны быть, исходя из того, что не просто так их ввели в php. Типо "Если звезды на небе зажигаются, то значит это кому-то нужно" Но вот зачем - для меня это очень важно, а сам ответ найти не могу. Оч хотелось бы получить ответ в виде списка основных преимуществ.

[Удален]
#1

Классы нужны для объединения однотипных функций (или функций для работы с определёнными абстракциями) в совокупности. Удобно при дальнейшем развитии и наращении функциональности без опасения сломать уже работающее. Сумбурно так)

ИЕ
На сайте с 16.01.2009
Offline
3
#2

их придумали, чтобы было удобнее работать. если кратко

Верстающая домохозяйка.
N
На сайте с 06.05.2007
Offline
419
#3

U3RlcA==, горькая правда для кодера заключается в том, что ему лично на начальном этапе развития они нафиг не нужны. Но они могут понадобится его работодателю, чтобы эффективно использовать (инкапсулировать и наследовать ) его труд. Все ООП лишь попытка рассадить кодеров по клеткам.

Так что читайте концепции и примеряйте ошейник.

Кнопка вызова админа ()
U3RlcA==
На сайте с 01.02.2009
Offline
30
#4

Насколько я понимаю, есть возможность создать класс с различными методами работы с БД, например, и потом вызывать эти методы в любом месте/файле кода, так ведь? А если я просто создам файл с кучей функций и глобальными переменными, к которым я смогу обращаться в любом месте кода/файла с кодом, тогда чем это будет отличаться от класса?

U3RlcA== добавил 01.02.2009 в 21:00

netwind:
Все ООП лишь попытка рассадить кодеров по клеткам.

То есть, насколько я понял, в описанном мною примере нет особой разницы между созданием файла с ф-циями для работы с БД и созданием класса для этой же работы? Получается, что лишь для удобства все это нужно - так типо проще код понять другому разработчику? Или точнее так проще собрать 5 разработчиков и дать каждому задание писать отдельные части большой программы?

[Удален]
#5
U3RlcA==:
Насколько я понимаю, есть возможность создать класс с различными методами работы с БД, например, и потом вызывать эти методы в любом месте/файле кода, так ведь? А если я просто создам файл с кучей функций и глобальными переменными, к которым я смогу обращаться в любом месте кода/файла с кодом, тогда чем это будет отличаться от класса?

На вашем примере: представим, что у вас не 1 база, а пять. Тогда надо делать 5 полностью идентичных наборов функций и 5 наборов глобальных переменных (они вообще зло - избавляйтесь от этого придатка быдлокодерства!), чтобы одновременно работать со всеми базами. Вот тут и поймёте как удобно сделать один класс и для него 5 объектов создать ;)

З
На сайте с 24.04.2008
Offline
54
#6

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

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

Конечно, если использовать их только как агрегаторов функций, то разницы практически никакой.

PS. А вообще объекты даже читаются проще, если носят грамотно подобранные имена.

DI
На сайте с 03.01.2007
Offline
123
#7

частный случай (на примере JS): у каждого объекта есть метод toString, который переводит объект в строковое представление. При этом операции выполняются разные, они зависят от класса данного объекта, и соответственно описываются в этих классах. А кодеру не нужно помнить наборы функций int2string(), string2string(), array2string(), проверять тип данных и т.п. - нужно просто вызвать метод toString.

PS: по правилам хорошего тона, если создается свой класс, то в нем тоже желательно описать общеупотребительные методы (тот же toString), который выдаст удобное строковое представление объекта данного класса. Тот, кто будет впоследствии использовать этот класс, по привычке поставит .toString() - и поблагодарит разработчика:)

Высказывание идиотского утверждения требует на порядок меньше усилий, чем его последовательное и обоснованное опровержение и более того, иногда это опровержение вообще невозможно. © (http://zhurnal.lib.ru/s/shapiro_m_a/raspidiota.shtml)
U3RlcA==
На сайте с 01.02.2009
Offline
30
#8
DenIT:
...нужно просто вызвать метод toString.

Который уже сам разберется какой там тип данных ему дали для обработки и что с ним дальше делать, так ведь? Уже чуть понятней.

DI
На сайте с 03.01.2007
Offline
123
#9

U3RlcA==, классу не передают тип данных. Класс уже содержит всю необходимую информацию о своих объектах (их тип, свойства и т.п.), поэтому и выполняет те действия, которые характерны для его объектов. Если вызвать метод для какого-либо объекта - то вызовется метод, описанный в его классе. Поэтому кодер может даже не знать, с каким классом работает (а работает он с конкретным объектом) - он просто получит требуемый результат.

edogs software
На сайте с 15.12.2005
Offline
775
#10
nikitian:
На вашем примере: представим, что у вас не 1 база, а пять. Тогда надо делать 5 полностью идентичных наборов функций и 5 наборов глобальных переменных (они вообще зло - избавляйтесь от этого придатка быдлокодерства!), чтобы одновременно работать со всеми базами. Вот тут и поймёте как удобно сделать один класс и для него 5 объектов создать ;)

Если у нас не 1 база, а 5, то мы обойдемся вполне 1 набором функций и 1 глобальной переменной. Если Вам для этого же без классов понадобится 5 наборов и 5 отдельных глобальных переменных, то вот это действительно быдлокодерство, и с таким подходом даже классы не помогут улучшить код.

DenIT:
частный случай (на примере JS): у каждого объекта есть метод toString, который переводит объект в строковое представление. При этом операции выполняются разные, они зависят от класса данного объекта, и соответственно описываются в этих классах. А кодеру не нужно помнить наборы функций int2string(), string2string(), array2string(), проверять тип данных и т.п. - нужно просто вызвать метод toString.

Мысль верная, но этот пример надуманный. Никто не мешает создать функцию, которая будет приводить объект в строковое представление, в зависимости от его типа. Фактически реализуя классы, Вы и создаете по одной функции на каждый тип объекта. Просто они разбросаны по разным классам, вместо того, что бы быть в одной функции.

А разницы в использовании между echo $db->toString и echo toString($db) на самом деле не много, согласны? И в обоих случаях разработчик может даже не знать, с каким классом работает.

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

U3RlcA==:
Получается, что лишь для удобства все это нужно - так типо проще код понять другому разработчику? Или точнее так проще собрать 5 разработчиков и дать каждому задание писать отдельные части большой программы?

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

С технической точки зрения классы более ресурсоемки и у Вас появляется необходимость таскать за собой переменную-экземпляр постоянно ( $db->query($sql) покатит только если переменная откуда-то протащена, а для query($sql); можно и не таскать за собой этот хлам) или же привязываться насмерть к статическому имени класса (типа db::query()).

ООП без классов в php выглядит ничуть не хуже, а местами даже лучше. Да и работает побыстрее зачастую. За примером далеко ходить не надо - drupal тот же самый, думаем многие хотя бы слышали о нем.

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

Разработка крупных и средних проектов. Можно с криптой. Разумные цены. Хорошее качество. Адекватный подход. Продаем lenovo legion в спб, дешевле магазинов, новые, запечатанные. Есть разные. skype: edogssoft

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