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

Зачем быть уникальным в мире, где все можно скопировать
Почему так важна уникальность текста и как она влияет на SEO
Ingate Organic
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Вопрос возможно нубовский, но суть в чем? Прочитал про классы в php, вроде понял для себя, что такое объекты класса и его методы, но не нашел ответа на более важный для себя вопрос - для чего они нужны и в чем основные преимущества в их использовании? В программировании новичек, что такое ф-ции и переменные в курсе, объекты и методы оч похожи на них, но все равно не вижу преимуществ пока, хотя знаю, что они должны быть, исходя из того, что не просто так их ввели в php. Типо "Если звезды на небе зажигаются, то значит это кому-то нужно" Но вот зачем - для меня это очень важно, а сам ответ найти не могу. Оч хотелось бы получить ответ в виде списка основных преимуществ.
Классы нужны для объединения однотипных функций (или функций для работы с определёнными абстракциями) в совокупности. Удобно при дальнейшем развитии и наращении функциональности без опасения сломать уже работающее. Сумбурно так)
их придумали, чтобы было удобнее работать. если кратко
U3RlcA==, горькая правда для кодера заключается в том, что ему лично на начальном этапе развития они нафиг не нужны. Но они могут понадобится его работодателю, чтобы эффективно использовать (инкапсулировать и наследовать ) его труд. Все ООП лишь попытка рассадить кодеров по клеткам.
Так что читайте концепции и примеряйте ошейник.
Насколько я понимаю, есть возможность создать класс с различными методами работы с БД, например, и потом вызывать эти методы в любом месте/файле кода, так ведь? А если я просто создам файл с кучей функций и глобальными переменными, к которым я смогу обращаться в любом месте кода/файла с кодом, тогда чем это будет отличаться от класса?
U3RlcA== добавил 01.02.2009 в 21:00
Все ООП лишь попытка рассадить кодеров по клеткам.
То есть, насколько я понял, в описанном мною примере нет особой разницы между созданием файла с ф-циями для работы с БД и созданием класса для этой же работы? Получается, что лишь для удобства все это нужно - так типо проще код понять другому разработчику? Или точнее так проще собрать 5 разработчиков и дать каждому задание писать отдельные части большой программы?
Насколько я понимаю, есть возможность создать класс с различными методами работы с БД, например, и потом вызывать эти методы в любом месте/файле кода, так ведь? А если я просто создам файл с кучей функций и глобальными переменными, к которым я смогу обращаться в любом месте кода/файла с кодом, тогда чем это будет отличаться от класса?
На вашем примере: представим, что у вас не 1 база, а пять. Тогда надо делать 5 полностью идентичных наборов функций и 5 наборов глобальных переменных (они вообще зло - избавляйтесь от этого придатка быдлокодерства!), чтобы одновременно работать со всеми базами. Вот тут и поймёте как удобно сделать один класс и для него 5 объектов создать ;)
Функции отражают действия, а объекты - предметы (физические или логические).
По сути в класс не только предоставляет возможность действий (т.е. методы класса являются функциями), но и несет в себе метаданные об объекте (статусные свойства), из классов можно делать иерархии (наследование, полиморфизм и прочие плюшки) с переопределением методов.
Конечно, если использовать их только как агрегаторов функций, то разницы практически никакой.
PS. А вообще объекты даже читаются проще, если носят грамотно подобранные имена.
частный случай (на примере JS): у каждого объекта есть метод toString, который переводит объект в строковое представление. При этом операции выполняются разные, они зависят от класса данного объекта, и соответственно описываются в этих классах. А кодеру не нужно помнить наборы функций int2string(), string2string(), array2string(), проверять тип данных и т.п. - нужно просто вызвать метод toString.
PS: по правилам хорошего тона, если создается свой класс, то в нем тоже желательно описать общеупотребительные методы (тот же toString), который выдаст удобное строковое представление объекта данного класса. Тот, кто будет впоследствии использовать этот класс, по привычке поставит .toString() - и поблагодарит разработчика:)
...нужно просто вызвать метод toString.
Который уже сам разберется какой там тип данных ему дали для обработки и что с ним дальше делать, так ведь? Уже чуть понятней.
U3RlcA==, классу не передают тип данных. Класс уже содержит всю необходимую информацию о своих объектах (их тип, свойства и т.п.), поэтому и выполняет те действия, которые характерны для его объектов. Если вызвать метод для какого-либо объекта - то вызовется метод, описанный в его классе. Поэтому кодер может даже не знать, с каким классом работает (а работает он с конкретным объектом) - он просто получит требуемый результат.
На вашем примере: представим, что у вас не 1 база, а пять. Тогда надо делать 5 полностью идентичных наборов функций и 5 наборов глобальных переменных (они вообще зло - избавляйтесь от этого придатка быдлокодерства!), чтобы одновременно работать со всеми базами. Вот тут и поймёте как удобно сделать один класс и для него 5 объектов создать ;)
Если у нас не 1 база, а 5, то мы обойдемся вполне 1 набором функций и 1 глобальной переменной. Если Вам для этого же без классов понадобится 5 наборов и 5 отдельных глобальных переменных, то вот это действительно быдлокодерство, и с таким подходом даже классы не помогут улучшить код.
частный случай (на примере JS): у каждого объекта есть метод toString, который переводит объект в строковое представление. При этом операции выполняются разные, они зависят от класса данного объекта, и соответственно описываются в этих классах. А кодеру не нужно помнить наборы функций int2string(), string2string(), array2string(), проверять тип данных и т.п. - нужно просто вызвать метод toString.
Мысль верная, но этот пример надуманный. Никто не мешает создать функцию, которая будет приводить объект в строковое представление, в зависимости от его типа. Фактически реализуя классы, Вы и создаете по одной функции на каждый тип объекта. Просто они разбросаны по разным классам, вместо того, что бы быть в одной функции.
А разницы в использовании между echo $db->toString и echo toString($db) на самом деле не много, согласны? И в обоих случаях разработчик может даже не знать, с каким классом работает.
То есть классы безусловно предоставляют удобство реализации некоторых вещей и стандартизацию их реализации, но не предоставляют практически ничего абсолютно уникального и нереализуемого через функции.
Получается, что лишь для удобства все это нужно - так типо проще код понять другому разработчику? Или точнее так проще собрать 5 разработчиков и дать каждому задание писать отдельные части большой программы?
Именно так, Вы абсолютно верно уловили. Классы в php применительно к веб, это лишь некий стандартный способ реализации некоторых вещей, соглашений, способов раелизации чего-то. Фактически форма записи, что в принципе тоже полезно, а в больших проектах просто необходимо.
С технической точки зрения классы более ресурсоемки и у Вас появляется необходимость таскать за собой переменную-экземпляр постоянно ( $db->query($sql) покатит только если переменная откуда-то протащена, а для query($sql); можно и не таскать за собой этот хлам) или же привязываться насмерть к статическому имени класса (типа db::query()).
ООП без классов в php выглядит ничуть не хуже, а местами даже лучше. Да и работает побыстрее зачастую. За примером далеко ходить не надо - drupal тот же самый, думаем многие хотя бы слышали о нем.
Хотелось бы пояснить. Мы нисколько не против классов, и тем более ООП. Мы очень даже за. Но нужно выбирать использование классов по правильным, а не надуманным причинам. Мода на ООП к сожалению привнесла кучу надуманных аргументов в пользу использования классов в пхп. И если ориентироваться на эти аргументы, то получается жуткий код, в котором нет ничего ООП-шного и красивого и стройного.