Объектно-ориентированное программирование в PHP. Первое знакомство
Сегодняшняя статья будет первой из цикла статей посвященных объектно-ориентированному программированию в PHP.
Из данной статьи Вы узнаете основные базовые понятия объектно-ориентированного программирования. А именно:
- Что такое объектно-ориентированное программирования
- Как объектно-ориентированное программирования может помочь вам писать лучше PHP скрипты
- Некоторые основные понятия, в том числе классы, объекты, методы и свойства
- Как начать писать объектно-ориентированный PHP код.
Готовы исследовать мир объектов PHP? Давайте начнем!
Что такое объектно-ориентированное программирование?
Если Вы когда-либо создавали и использовали свои собственные функции в PHP, то Вы использовали стиль программирования, известный как процедурное программирование.
В процедурном программировании, Вы как правило создаете структуры данных — числа, строки, массивы и так далее, которые потом передаете в функцию. А функция, используя эти данные, делает те или иные поставленные задачи и возвращает полученный результат.
Объектно-ориентированное программирование, или ООП, объединяет структуру данных и функции в единое целое, которое называется объект.
Часто, объекты, которые Вы создаете в ООП, как правило, отражают реальные объекты. Например, если вы пишете форум для вашего сайта, вы можете создать объект Member, который содержит всю информацию о данном форуме пользователя (имя пользователя, логин, адрес электронной почты, пароль, и так далее), а также функции для работы с этими данными (регистрация, авторизация и так далее).
Зачем использовать объектно-ориентированное программирование?
Процедурные и объектно-ориентированное программирования два различных способа сделать одно и то же. Ни один из стилей программирования нельзя назвать лучшим, чем другой - это личное дело каждого - и вы можете свободно смешивать и сочетать процедурное и объектно-ориентированное программирование в единый сценарий PHP.
Тем не менее, есть некоторые преимущества, которые ООП можем предложить вам как разработчику:
- Повторное использование: Объект это логический объект у которого есть комплект свойств и методов и он может взаимодействовать с другими объектами. . Объект может быть абсолютно независимым или может зависеть от других объектов. Объект обычно создают для решения специфических поставленных проблем. Следовательно когда другие разработчики сталкиваются с похожими проблемами,они могут подключить ваш класс к своему проекту и использовать его не боясь что он нарушит процесс их разработки. Это позволяет избежать DRY, что расшифровывается как Don’t Repeat Yourself ( не повторяйся). В процедурном или модульном программировании, повторное использование возможно только в совокупности.
- Рефакторинг: Когда вам необходимо в проекте использовать рефакторинг, ООП предоставляем вам максимум преимуществ, так как все объекты это маленькие элементы и содержат свои свойства и методы как часть себя. По этому использовать рефакторинг относительно легко.
- Расширяемость: Если вам необходимо расширять функциональность вашего проекта, вы можете достичь лучших результатов при помощи ООП. Одна из основных функциональностей ООП это расширяемость. Вы можете использовать рефакторинг объектов что бы добавить функциональность. Работая над этим, вы по прежнему можете сохранить прежнюю совместимость объекта - следовательно вы можете прекрасно работать и с прежним кодом. Или же вы можете расширить объект и создать абсолютно новый, который будет содержать все необходимые свойства и методы родительского объекта от которого происходит новый, а потом уже добавить в него новые функции. Это называется “наследование” и это очень важная возможность ООП.
- Поддержка: объектно-ориентированный код легче поддерживать так как он следует весьма жёстким соглашениям написания кода и пишется в самопоясняющейся форме. К примеру, когда разработчик дополняет, перерабатывает код, или отлаживает его, он может легко найти внутреннюю структуру кода и поддерживать код время от времени. Более того, когда в вашем окружении работает команда разработчиков ООП может быть лучшим решением так как вы можете распределять ваш код между членами команды, после разбития его на маленькие части. Эти маленькие части могут быть разработаны как отдельные объекты, следовательно разработчики могут работать практически независимо друг от друга. В конечном итоге объеденить все части в одно приложение не составит большого труда.
- Эффективность: Идея ООП в действительности была разработана для повышения эффективности и облегчения процесса разработки . Несколько шаблонов проектирования разработаны что бы создавать более эффективный и хороший код. Более того в ООП вы можете размышлять над вашими решениями в более удобной форме чем в процедурном подходе. Поскольку вы разбиваете вашу проблему на несколько маленьких проблем и вы находите решение для каждой из них отдельно, большая проблема решается сама по себе.
Некоторые основные понятия
Прежде чем мы перейдем к написанию объектно-ориентированного кода в PHP, важно понять, 4 основные понятия ООП: классы, объекты, свойства и методы.
Классы
Класс является основой для объектов. Это кусок кода, который определяет:
- типы данных, которые будет хранить объект
- функции, которые будет этот объект содержать.
Объекты
Объект представляет собой особый тип переменных, который создается из класса и который содержит в себе данные (свойства) и функций (методы) для их обработки.. Объекты еще называют — экземплярами класса. Вы можете создавать любое количество независимых объектов из одного класса, даже если они все будут рядом.
Свойства
Свойство – это та же самая переменная, только внутри объекта. Свойства объекта тесно связаны с объектом. Хотя все объекты, созданные из данного класса имеют те же свойства, свойства одного объекта могут иметь различные значения от свойств другого объекта.
Методы
Функции, которые определены в классе и используются в объекте — называются методами. Во многих отношениях, они как обычные функции - вы можете передать им значения, они могут содержать локальные переменные, и они могут возвращать значения. Однако, методы объекта обычно работают в основном со свойствами объекта.
Как создавать классы в PHP
Теперь, когда вы знаете, что такое классы, объекты, свойства и методы, пришло время приступить к делу и создать несколько классов и объектов с использованием PHP кода.
Во-первых, давайте посмотрим на создание класса. Основной синтаксис для создания класса в PHP выглядит следующим образом:
class ClassName { // описание членов класса - свойств и методов для их обработки }
В качестве примера создадим класс Member
class Member { // описание членов класса - свойств и методов для их обработки }
Все довольно просто! Конечно, этот класс не делает ничего, пока не будут добавлены свойства и методы класса. Тем не менее, этот код создает действительный и пригодный для использования класс в PHP. Хорошей практикой программирования считается создание классов в отдельных файлах, с тем же именем что и название класса. Например, можно было бы данный код сохранить в файл с именем Member.php
Как создать объект в PHP
Объекты создаются из класса с помощью ключевого слова new:
new ClassName()
Данный код создает объект на основе класса ClassName. Для того чтобы получить доступ к вновь созданному объекту его необходимо сохранить в переменную. Например, давайте создадим новый объект Member и сохраним его в переменной $member:
$member = new Member();
Мы также можем создать еще один объект из того же класса:
$member2 = new Member();
Даже если мы создали их из того же класса Member два объекта, $member и $member2 являются независимыми друг от друга.
Добавление свойств в класс
Теперь, когда мы знаем, как создавать классы и объекты, давайте посмотрим на добавлении свойств. Есть 3 типа свойств, которые можно добавить в класс:
- Public - позволяет обращаться к свойствам отовсюду
- Private - позволяет обращаться к свойствам только внутри текущего класса.
- Protected - позволяет обращаться к свойствам только текущего класса и класса, который наследует свойства текущего класса
Чтобы добавить свойство классу, необходимо написать ключевые слова public, private или protected, а затем имя свойства:
class ClassName { public $propertyName; private $propertyName; protected $propertyName; }
Давайте добавим в наш класс Member public свойство $username, которое будет содержать имя пользователя:
class Member { public $username = ""; }
Обратите внимание, что мы задали свойству $username значение — пустая строка. Это означает, что когда мы создадим новый объект Member, свойству $username на начальном этапе будет установлено это значение.
Доступ к свойствам объекта
Чтобы получить доступ к свойству объекта используется оператор ->, а именно:
$object->propertyName
Давайте попробуем создать новый класс Member, добавим в него свойство $username, а затем создадим экземпляр класса и попробуем установить и считать значение свойства $username:
<?php class Member { public $username = ""; } $member = new Member(); $member->username = "Fred"; echo $member->username; // выведет "Fred" ?>
Если вы запустите приведенный выше код, то на экран будет выведено значение свойства $username = "Фред". Как Вы видите, можно обращаться к свойствам объекта так же, как и к обычным переменным - вы можете получить их значения, и вы можете присвоить им новые значения.
Добавление методов в класс
Как я упоминал ранее, методы это обычные функции, которые являются частью класса. Методы создаются точно также как и обычные функции, с помощь ключевого слова - function. Разница лишь в том, что им можно задавать область видимости, точно так же как и свойствам, при помощи ключевых слов public, private или protected
class ClassName { public function methodName() { // (Method's code here) } private function methodName() { // (Method's code here) } protected function methodName() { // (Method's code here) } }
Как и свойства, public методы могут быть вызваны из любого места, private методы можно вызвать только с помощью других методов в классе, и protected методы могут быть вызваны с помощью методов текущего класса и класса, который наследует методы текущего класса
Давайте попробуем добавить некоторые методы в наш класс Member. Мы добавим:
- private свойство $loggedIn для записи статуса авторизации на форуме (авторизован пользователь или нет)
- Метод login(), который авторизует пользователя на форуме, установив свойство $LoggedIn в TRUE
- Метод logout(), будет устанавливать значение свойства $LoggedIn в FALSE
- Метод isLoggedIn(), который будет возвращать значение свойства $LoggedIn
Вот наш скрипт:
<?php class Member { public $username = ""; private $loggedIn = false; public function login() { $this->loggedIn = true; } public function logout() { $this->loggedIn = false; } public function isLoggedIn() { return $this->loggedIn; } } ?>
Обратите внимание, что мы использовали новое ключевое слово в наших методах: $this. В контексте метода объекта, специальная переменная $this относится к самому объекту. С помощью переменной $this метод может получить доступ к любому из других свойств и методов в этом объекте.
Например, метод login() получает доступ к свойству объекта $loggedIn использую следующую запись: $this->loggedIn
Так как мы задали свойству $LoggedIn ключевое слово private, то доступ к нему можно получить только через методы: login(), logout(),isLoggedIn().
Использование методов
Для вызова метода объекта необходимо использовать оператор ->:
$object->methodName()
Это работает так же, как и обычный вызов функции. Вы можете передать аргументы в скобках (при условии, что метод может принимать аргументы), и вызов метода также может возвращать значение, которое вы можете использовать.
Теперь, когда мы добавили некоторые методы в наш класс Member, давайте попробуем их использовать:
<?php class Member { public $username = ""; private $loggedIn = false; public function login() { $this->loggedIn = true; } public function logout() { $this->loggedIn = false; } public function isLoggedIn() { return $this->loggedIn; } } $member = new Member(); $member->username = "Fred"; echo $member->username . " is " . ( $member->isLoggedIn() ? "logged in" : "logged out" ) . "<br>"; $member->login(); echo $member->username . " is " . ( $member->isLoggedIn() ? "logged in" : "logged out" ) . "<br>"; $member->logout(); echo $member->username . " is " . ( $member->isLoggedIn() ? "logged in" : "logged out" ) . "<br>"; ?>
Этот код выведет на экран следующие значения:
Fred is logged out
Fred is logged in
Fred is logged out
Вот как работает этот скрипт:
1. После определения класса Member создаем новый объект Member и сохраним его в переменную $member. Также мы задаем новое значение свойству $username - Fred
2. Затем мы вызываем $member->isLoggedIn(), чтобы определить, является ли пользователь авторизованным. Так как по умолчанию значение свойства $loggedIn объекта $member уствновлено в FALSE,то на экран выводится: «Fred is logged out»
3. Затем мы вызываем метод login() объекта $member. Данный метод устанавливает свойство $loggedIn объекта $member в TRUE
4. Теперь, когда мы называем метод isLoggedIn () снова, он возвращает истину, поэтому на экран выводится: "Fred is logged in".
5. Затем мы вызываем метод logout() объекта $member, который устанавливает свойство $loggedIn объекта $member в FALSE
6. Наконец, мы вызываем метод isLoggedIn () в третий раз. На этот раз он возвращает FALSE, потому что свойство $ LoggedIn было установлено в FALSE методом logout(). Это выведет на экран: «Fred is logged out»
Итоги
В данной статье мы рассмотрели основы объектно-ориентированного программирования в PHP. Мы изучили следующие темы:
1. Что такое объектно-ориентированное программирования
2. Что такое классы, объекты, свойства и методы
3. Как создавать классы и объекты в PHP
4. Как создать и использовать свойства в PHP
5. Что такое область видимости свойств и методов в ООП
6. Как создать и использовать методы в PH
То что изложено в этой статье является лишь необходимым минимумом, для дальнейшего изучения ООП в PHP.
Источник: http://www.elated.com/articles/object-oriented-php-for-absolute-beginners
-
Комментарии (4)
- Сайт