<MyRusakov.ru />

PHP и MySQL с Нуля до Гуру

PHP и MySQL с Нуля до Гуру

Данный курс - это более 20-ти часов видеоуроков по изучению PHP и MySQL. Ключевой момент курса - это создание движка для сайта с нуля. Каждая строчка комментируется. Практически для каждого урока имеются упражнения. Причём данные упражнения направлены не только на закрепление материала, но и на реализацию реальных задач, встающих перед Web-разработчиками при создании сайтов. После курса Вы сможете без проблем создавать движки для любых сайтов.

Также почти к каждому уроку идут упражнения для закрепления материала.

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

Подробнее
Подписка

Подписавшись по E-mail, Вы будете получать уведомления о новых статьях.

Подписка Подписаться

Добавляйтесь ко мне в друзья ВКонтакте! Отзывы о сайте и обо мне оставляйте в моей группе.

Мой аккаунт Мой аккаунт Моя группа
Опрос

Каким движком Вы предпочитаете пользоваться?

ООП против процедурного подхода.

ООП против процедурного подхода.

Недавно у меня спросили, чем ООП лучше процедурного подхода. Я подумал, что этот вопрос волнует большинство начинающих разработчиков, и решил написать статью на эту тему. Приятного прочтения.

Введение

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

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

В ООП вы создаете единую сущность - ОБЪЕКТ! В нем есть нужные свойства и методы, необходимые для манипулирования данными. Вы загружаете данные в объект, делаете что-то и получаете результат.

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

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

Но самый большой плюс ООП - наследование.

Наследование

К примеру, вы можете создать объект User, который, как понятно из названия(еще один плюс ООП), будет отвечать за пользователей. Он будет содержать примерно такие свойства и методы:

<?php
  class User {
   public $username;
   private $login = false;

   public function isLogin() {
    if($this->login === false) {
     return 'Пользователь вне сети';
    } else {
     return 'Пользователь в сети';
    }
   }

   public function login() {
    if($this->login === false) {
     $this->login = true;
    } else {
     $this->login = false;
    }
   }
  }
?>

У нас есть объект с полями, содержащими логин пользователя и полем, которое показывает, авторизован пользователь или нет. Также у нас есть метод, проверяющий это поле и возвращающий результат, и метод, который авторизует или деавторизует пользователя.

Теперь мы решили создать администратора. Но он ведь тоже обычный пользователь, верно? Да, с чуть большими правами, но все же он просто пользователь. Зачем все это переписывать? Просто унаследуем.

<?php
  class Administrator extends User {
   public function ban($username) {
    // баним пользователя
   }
  }
?>

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

Главный принцип ООП - DRY(Dont't Repeat Yourself) - не дублируй код. И его следует соблюдать.

Тоже самое можно сказать и про перегрузку методов. Вам не нужно менять ВСЁ, вам нужно лишь поменять часть кода.

Надеюсь, это понятно. Еще один существенный плюс - типизация.

Типизация

Вы можете явно указать какой объект должен быть, и никакой другой не пройдет.

<?php
  // ...
  public function __construct(User $user) {
   // ...
  }
  // ...
?>

Мы явно указали, что в конструктор должен быть передан пользователь, а не что-то другое.

<?php
  $user = new User();
  $something = new Something();
  $a = new Obj($something);
?>

Здесь мы передаем something вместо пользователя и получим ошибку.

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

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

Если кто-то хочет серъезно изучить ООП, то советую почитать следующую книжку:

Мэтт Зандстра - PHP: Объекты, шаблоны и методики программирования

В этой книге довольно неплохо рассказывается про то, какие плюсы у ООП, как его правильно использовать и что такое шаблоны проектирования. Дерзайте! Удачи!

Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!

Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.

Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления

Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.

Порекомендуйте эту статью друзьям:

Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):

  1. Кнопка:

    Она выглядит вот так: Как создать свой сайт

  2. Текстовая ссылка:

    Она выглядит вот так: Как создать свой сайт

  3. BB-код ссылки для форумов (например, можете поставить её в подписи):

Комментарии (21):

testick testick 16.07.2014 11:10:23

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

Ответить

kruty kruty 16.07.2014 16:01:17

Так, він виконується трохи швидше, але не потрібно робити заміни в коді з ооп на процердуний, тільки тому, що на 0.003 виконується швидше. Якщо постає питання швидкості - потрібно думати про використання memcache, nosql, зберігати сесії в memcachedb, а не на файлах і т.д Хочу порадити по цьому(не рахуйте за рекламу) ruhighload.com А щодо статті хочу сказати, що де треба одну функцію - не треба городити клас, де є об'єкт з купу методів - треба робити на ооп. Але не потрібно з ооп робити фабрики фабрик..

Ответить

maksimasz maksimasz 16.07.2014 16:59:35

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

Ответить

testick testick 16.07.2014 17:43:14

Что-то с ajax вы преувеличиваете. Никаких сложностей. Все делается в контроллере. Дергаем данные из модели и выводим в виде. Никаких проблем. Даже и не думал, что это так сложно

Ответить

maksimasz maksimasz 16.07.2014 18:06:21

А МОЖНО ПОСМОТРЕТЬ РАБОЧИЙ ПРИМЕР С ИСПОЛЬЗОВАНИЕМ НАПРИМЕР $.POST()

Ответить

testick testick 16.07.2014 18:27:55

я обычно делаю класс контроллера, к примеру называю его ajax. и аяксом отправляю пост запросы в /index/name_function в которой уже и подключаю нужные модели и прочее.

Ответить

maksimasz maksimasz 16.07.2014 19:54:44

Да, хороший вариант, согласен, но согласитесь для "процедурщика" это темный лес. Куда проще отправить данные, например, на ajax.php , где уже есть подключение к базе данных и нужные функции , и получить обратно ответ в какой-нибудь, <div>. НУ как-то так

Ответить

testick testick 16.07.2014 22:13:12

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

Ответить

testick testick 16.07.2014 22:14:48

а по поводу процедурщика. Я был им ничтожное время и после джавы я себе не представляю даже как можно иначе:( Но спорить не буду, переучиваться всегда сложнее чем что-то выучить

Ответить

maksimasz maksimasz 16.07.2014 22:28:24

Я процедуркой программирую уже лет 5 а на ОПП перешел года два как, так если честно до сих пор понять не могу чем ОПП лучше, тут скорее всего зависит от того кто как привык и от количества человек работающих над скриптом, если какой сайт клиенту сделать то это одно, ну а если магазин с возможностью добавлять всякие модули то это другое. Кстати из личного опыта могу сказать , что процедурный подход работает быстрее, меньше шагов вправо влево делать надо. У меня обычно бывает микс, я использую в одном скрипте и ОПП и процедурный подход.

Ответить

testick testick 16.07.2014 22:30:48

А у меня вот все иначе) Все, кого знаю из веб области, убеждают, что процедурка целесообразнее. Мол привязка клиента, более быстрое исполнение скриптов и т.д.)))

Ответить

maksimasz maksimasz 16.07.2014 22:50:27

И таки они правы на все 100 Процедурка и целесообразнее и быстрее

Ответить

testick testick 16.07.2014 22:52:53

так вот. И как ооп`шнику пересесть не процедурку? Миф и не реальность)

Ответить

maksimasz maksimasz 16.07.2014 23:02:03

Легко, у меня все мои друзья , которые программировали на С++, свободно на процедурку перешли

Ответить

php_programmer php_programmer 16.07.2014 23:29:38

Ух ты! Да вы тут чат устроили) Ну, раз пошло такое дело, то выскажу и я свое мнение. Как в статье и написано, плохого или хорошего подхода нет. Если вы пишете скрипт на 10 строк(я утрирую, конечно), то не стоит заморачиваться с ООП. Тогда и скрипт будет быстрее работать и все будет понятно. Однако, если вы собираетесь писать большой портал, где, как сказано выше, будут модули, очень много самого разного функционала и состоять портал будет из ТЫСЯЧ файлов, то тут, конечно, лучше использовать ООП. Особенно, если вы работаете в команде. Но, если вы совсем не понимаете, зачем нужно ООП, пишете все в процедурном стиле и у вас это хорошо получается, то тогда пишите так и дальше. Но хотя бы основы ООП знать все же стоит.

Ответить

maksimasz maksimasz 17.07.2014 11:05:45

100%

Ответить

ScarEngineer ScarEngineer 17.07.2014 12:18:11

Хорошая статья. У меня к вам вопрос. Я знаю ООП, но не очень хорошо. А сайт создать все-таки хочется. Так вот, стоит ли писать сайт на процедурном походе, а потом, когда очень хорошо освою, переписать на ООП или изучить как следует ООП и писать на нем?

Ответить

mischa.samolkaev mischa.samolkaev 17.07.2014 14:19:32

Учи ООП, многие вещи будет корректней программировать с его использованием

Ответить

logaut logaut 17.07.2014 16:27:22

ООП лучше тем, что можно разбивать программу на классы и MVC этим самым менее загрязняя html код, и плюс к тому, что на ООП свой код можно лучше защитить от взломов. Ведь намного проще, например, когда вы написали сайт, а через время захотели сделать в нём некие изменение, например, добавить гостевую книгу. Вы просто создаёте новый класс и подключаете класс guestbook к классу где выполняется подключение к базе данных и так далее. Ещё очень хороший пример, так - это когда вы хотите сменить шаблон текущий на другой. Если у вас сайт будет написан на процедурном стиле программирования, то придётся и в программный код влазить глубоко по скольку у вас код будет и на страницах сайта. А если написан сайт при помощи ООП, то вам не нужно лазить в программный код. Единственное, так - это вам прописать php строки нужно и то, если у сайта нету шаблонезаторов.

Ответить

maksimasz maksimasz 17.07.2014 17:00:44

Не совсем согласен, при правильном написании даже на процедурном коде, все равно создается функция шаблонизатора,поэтому внешне html выглядет так же. Смешивать php и html считается дурным тоном даже для процедурного программиста, не зря придуманы записи такого типа <?if($a<=$b):?> html код <?endif;?> и это работает в обоих стилях ну и такое тоже <?=$title;?> или %title% все зависит от шаблонизатора

Ответить

logaut logaut 17.07.2014 19:29:51

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

Ответить

Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.