Статьи

Полное руководство по объектно-ориентированному программированию на PHP (часть 1)

/img/blog/object-oriented-programming-in-php.jpg

Вступление

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

Например, есть места, такие как Лондон, которые настолько конкурентоспособны, что вы  должны  иметь ООП среди своих способностей, чтобы получить работу в качестве разработчика PHP.

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

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

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

Различия между процедурным и ООП

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

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

До сих пор вы, вероятно, кодировали то, что называется  процедурным программированием .

Вы пишете свой PHP в начале страницы, соединяете его с выбранной базой данных и создаете переменные для использования чуть ниже на той же странице, или, возможно, создаете весь свой код PHP на одной странице, а затем запрашиваете или включаете скрипт в ваша главная страница

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

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

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

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

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

Чтобы решить эту проблему, прочитайте серию статей о PHP-фреймворках, которые я написал  .

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

Что такое объект?

Как вы, возможно, уже знаете, в PHP и подавляющем большинстве языков программирования все данные имеют свой собственный тип. В PHP используются следующие типы:

  • НОЛЬ
  • Булевы
  • Целые
  • Числа с плавающей точкой
  • Струны
  • Массивы
  • Ресурсы
  • Callbacks
  • Объекты

 В этой статье мы сосредоточимся на последнем типе в списке: объекты. 

Согласно Википедии « Объект относится к конкретному экземпляру класса, где объект может быть комбинацией переменных, функций и структур данных. » 

Ясно, верно? На самом деле, нет.

Думайте об объекте как о здании. У здания есть несколько характеристик  (в программировании они называются свойствами), таких как окна, двери, комнаты и стены. 

В PHP вы создаете объект, используя  new ключевое слово. Вот пример:

 $myHome = new Building();

Теперь переменная   $myHome содержит всю информацию, включенную в здание.

Не волнуйтесь, если это еще не ясно.

В следующих разделах мы собираемся исследовать мир ООП на многочисленных примерах. 

Эти примеры предоставят вам четкий способ понять концепции этой парадигмы и подготовят вас к написанию объектов, классов и отношений самостоятельно.

Занятия в PHP

Что такое класс?

Я уже кратко упомянул, что такое объект, и концепция объектов и классов очень похожа, что может привести к некоторой путанице,

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

И классы, и объекты символизируют здание, они оба имеют свойства и методы.

Каковы различия тогда? 

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

Вместо этого объект представляет фактическое здание. Фактическое количество окон, может быть, цвет рамы, точное количество комнат, состояние замка (ворота закрыты? Он открыт?) И так далее…

Ключевое слово «Класс»

Вы уже видели, что для создания объекта вам нужно использовать  new ключевое слово. Но что нового?

Новый элемент, который необходимо создать, является экземпляром класса. В рамках класса вы опишете все характеристики, которыми должно  обладать здание  , например количество окон, их цвет, количество комнат и т. Д.

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

Чтобы создать класс, вам нужно использовать ключевое слово PHP  class, а затем открывающую скобку. Хорошей практикой является добавление скобки в новую строку.

Затем вам нужно добавить свойства и после этого добавить методы, которые требует класс.

Вот как:

 class Building 
       {
           // building’s properties
           $numberOfWindows = 10; 
           $colorOfWindows = “red”; 
           $numberOfRooms = 4;
           $lockClosed = false;

           // building’s methods
           /*
            *  The closeLock() method set the lockClosed property to true
            *  This means the lock is closed
            */
           function closeLock()
           {
               $this->lockClosed = true;
           }
           /*
            *  The openLock() method set the lockClosed property to false
            *  This means the lock is not closed, thus, it is open
            */
           function openLock()
           {
               $this->lockClosed = false;
           }
           /*
            *  The addAWindow() method add a window to the house
            */
           function addAWindow()
           {
               return $this->numberOfWindows = $this->numberOfWindows + 1 ;
           }
           /*
            *  The removeaWindow() method remove a window to the house
            */
           function removeAWindow()
           {
               return $this->numberOfWindows = $this->numberOfWindows - 1 ;
            }
        }

        $myHome = new Building();

Мой дом теперь имеет 10 красных окон, 4 комнаты, и он открыт для всех, кто хочет меня посетить.

«Новое» ключевое слово

Последний пример закончился командой 

$myHome = new Building();

Это  new ключевое слово делает экземпляр нового объекта из  Building класса и устанавливает его в вызываемой переменной   $myHome.

Теперь я могу вызывать  $myHomeсвойства и методы.

$myHome = new Building();
echo $myHome->numberOfRooms; // The output will be 4 
echo $myHome->addAWindow(); // The output will be 11

Новый элемент, который вы видите во фрагменте выше, это стрелка . ->

Не пугайтесь этого символа, это всего лишь синтаксис языка PHP, чтобы получить элемент, который вы хотите выбрать.

Подумайте, когда вы используете массив

echo $shoppingList[5];

Две квадратные скобки просто позволяют разработчику извлекать только шестой элемент $shoppingList массива (это не пятый элемент,  потому что индексы массива начинаются с 0).

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

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

$myHome = new Building();
$myNeighborHome = new Building();
echo $myHome->lockClosed; // The output will be false
echo $myNeighborHome ->colorOfWindows; // The output will be “red”

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

Свойства класса

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

Внутри класса к методам и свойствам нужно обращаться, используя  для нестатических и  для статических.  $this->propertyNameself::propertyName 

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

class Building
{
$wifi = 'this is a property';
    function wifi() {
    return 'this is a method';
    }
}

Методы и параметры классов

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

Мы уже видели несколько примеров:

    /*
     *  The openLock() method set the lockClosed property to false
     *  This means the lock is not closed, thus, it is open    
     */
    function openLock()
    {
        $this->lockClosed = false;
    }
    /*
     *  The addAWindow() method add a window to the house
     */
    function addAWindow()
    {
        return $this->numberOfWindows = $this->numberOfWindows + 1 ;
    }

Например, если вам нужно создать  car класс, у вас будет  brake() метод и  throttle() метод, а также  turnLeft() и  turnRight() .

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

Даже в этом случае хорошей практикой является добавление скобок на новую строку.

$ this и self ::

Чтобы выяснить, что  $this и  self::нужно ли мне объяснять, что  static означает ключевое слово.

Объявляя статические свойства и статические методы, вы сделаете их доступными без создания экземпляра класса. 

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

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

  • $this это просто ссылка на вызывающий объект.

class Building 
{
// building’s properties
    $numberOfWindows = 10; 

    function addAWindow()
    {
    return $this->numberOfWindows = $this->numberOfWindows + 1 ;
    }
}

Как вы можете видеть,  $this->numberOfWindows г efers к  $numberOfWindows переменной и ее значение становится извлекается из   AddAWindow() метода.

self:: в основном делает то же самое, но работает со статическими свойствами и методами.

 class Building 
{
// building’s properties
    static $numberOfWindows = 10;

    function addAWindow()
    {
    return self::$numberOfWindows  = self::$numberOfWindows + 1 ;
    }
}

Заключение

Как вы можете себе представить, есть еще много вещей, которые вам нужно узнать об ООП.

Мы только поцарапали поверхность, но этот маленький шаг, который вы сделали сегодня, приведет вас очень далеко, я гарантирую это.

Я скоро опубликую вторую часть этого руководства, так что следите за обновлениями!

Это первая часть статьи, посетите сайт anastasionico.uk для всей серии.