Reg.ru: домены и хостинг
Крупнейший регистратор и хостинг-провайдер в России.
Более 2 миллионов доменных имен на обслуживании.
Продвижение, почта для домена, решения для бизнеса.
Более 700 тыс. клиентов по всему миру уже сделали свой выбор.
Бесплатный Курс "Практика HTML5 и CSS3"
Освойте бесплатно пошаговый видеокурс
по основам адаптивной верстки
на HTML5 и CSS3 с полного нуля.
Фреймворк Bootstrap: быстрая адаптивная вёрстка
Пошаговый видеокурс по основам адаптивной верстки в фреймворке Bootstrap.
Научитесь верстать просто, быстро и качественно, используя мощный и практичный инструмент.
Верстайте на заказ и получайте деньги.
*Наведите курсор мыши для приостановки прокрутки.
Объектно-ориентированный подход в PHP для начинающих. Часть 1
Многим PHP-программистам объектно-ориентированное программирование кажется пугающим, изобилующим запутанным синтаксисом и другими сложностями.
Данный материал поможет Вам понять общие концепции, стоящие за объектно-ориентированным программированием и стиль написания кода, при котором сходные действия группируются в классы.
Именно это позволяет писать более компактный и эффективный код.
Понимание Объектно-Ориентированного Программирования (ООП)
ООП - это стиль написания кода, который позволяет разработчикам группировать сходные задачи в классы. Это помогает коду соответствовать так называемому принципу DRY (Don't Repeat Yourself - Не повторяйте сами себя) и быть легким с точки зрения модификации и доработки.
Если говорить кратко, то данный принцип означает, что каждая частица знания должна иметь единственное и однозначное представление в системе. Когда такой принцип реализуется грамотно, то модификация какой-либо части системы не приводит к тому, что приходится переделывать чуть-ли не все остальное.
Одно из главных преимуществ применения принципа DRY состоит в том, что при изменении какой-либо информации в Вашей системе, как правило, приходится править код только в каком-то одном месте.
Один из кошмаров веб-разработчиков - это поддержка кода, в котором происходит многократное объявление информации, что приводит к тому, что любое изменение в программе становится огромной головной болью из-за необходимости поиска дублирующихся данных и функционала.
ООП страшит многих разработчиков из-за того, что вводит новый синтаксис и, на первый взгляд, кажется гораздо более сложным делом, нежели простое процедурное кодирование. Однако, после более плотного знакомства с ним, многие соглашаются, что ООП не так сложно, как кажется, и является более продуктивным подходом к написанию кода.
Понимание Объектов и Классов
Прежде чем переходить непосредственно к ООП, необходимо иметь базовое понимание того, что такое объект, и что такое класс. Сейчас мы рассмотрим, как создаются классы, их возможности и некоторые из способов их использования.
Понимание отличия объектов от классов
Действительно, существует определенная путаница. Многие опытные разработчики используют эти два слова как взаимозаменяемые понятия, что зачастую очень путает новичков и портит им немало нервных клеток.
Класс, к примеру, подобен плану дома. Он определяет конфигурацию и устройство дома на бумаге. На плане могут быть представлены все детали внутреннего устройства дома, хотя в действительности самого этого дома еще не существует.
Объект же - это уже построенный по данному плану дом. Данные, хранящиеся в объекте, можно сравнить с бетоном, арматурой и деревом, из которых возводится дом. Не будучи собранными в соответствии с планом, все эти материалы являются просто кучей вещей. Однако, когда они собираются все вместе по определенным правилам, то организуются в полезную вещь - дом.
Классы формируют структуру данных и действий и используют эту информацию для создания объектов.
Понятно, что используя один и тот же план дома, его можно построить сколько угодно раз на разных улицах и в любых точках мира. Точно так же и на основании одного класса можно создать несколько объектов, которые совершенно не зависят друг от друга.
Структура Класса
Синтаксис создания класса вполне самоочевиден: объявляем класс, используя ключевое слово, а за ним следует само название класса с фигурными скобками:
<?php class MyClass { // Здесь идут свойства и методы класса } ?>
После создания класса можно создать новый объект, используя ключевое слово new, и сохранить его в переменную:
$obj = new MyClass;
Для того, чтобы увидеть содержимое объекта, используйте функцию var_dump():
var_dump($obj);
Создайте новый php-файл с произвольным именем и посмотрите, как это работает, воспользовавшись следующим блоком кода:
<?php class MyClass { // Здесь идут свойства и методы класса } $obj = new MyClass; var_dump($obj); ?>
Обратитесь к созданному Вами файлу, и на экране должна появиться следующая строка:
object(MyClass)#1 (0) { }
Отлично. Ваш первый простейший скрипт а-ля "Hello, World" готов. Но пользы от него совершенно никакой, поэтому двигаемся дальше.
Объявление Свойств Класса
Для добавления в класс информации используются свойства (по сути это переменные, относящиеся к данному конкретному классу). Они работают точно так же, как и обычные переменные, за исключением того, что они имеют привязку к объекту и, следовательно, доступ к ним можно получить только через объект.
Для того, чтобы добавить свойство в класс MyClass, внесите следующий код в скрипт:
<?php class MyClass { public $prop1 = "Я - свойство класса!"; } $obj = new MyClass; var_dump($obj); ?>
Ключевое слово public определяет так называемую "область видимости" свойства. Об этом мы поговорим позже в процессе изучение основ объектно-ориентированного программирования. Далее свойству дается имя, при этом используется стандартный синтаксис PHP и ему (свойству) присваивается значение (надо заметить, что свойствам в классе не обязательно иметь начальное значение).
Для того, чтобы получить значение свойства и вывести его на экран, нужно указать объект, к которому оно относится, и само свойство:
echo $obj->prop1;
Поскольку одновременно могут существовать несколько экземпляров класса (как, например, несколько домов, построенных по одному плану), то нужно явно указывать, с каким объектом мы работаем, иначе скрипт не сможет определить, свойство какого объекта нужно получить.
Знак "->" является специальной конструкцией, которая позволяет получить доступ к свойствам или методам данного объекта.
Измените скрипт, чтобы получить значение свойства, таким образом:
<?php class MyClass { public $prop1 = "Я - свойство класса!"; } $obj = new MyClass; echo $obj->prop1; // Выводим значение свойства ?>
Обновите страницу и Вы получите следующий результат:
Я - свойство класса!
Объявление Методов Класса
Методы - это функции, относящиеся к конкретному классу. Отдельные действия, которые способен будет производить объект, внутри класса называются методами.
К примеру, для создания методов, которые будут задавать и получать значение свойства $prop1, нужно изменить код таким образом:
<?php class MyClass { public $prop1 = "Я - свойство класса!"; public function setProperty($newval) // функция для задания значения свойства { $this->prop1 = $newval; } public function getProperty() // функция для получения значения свойства { return $this->prop1 . "<br />"; } } $obj = new MyClass; echo $obj->prop1; ?>
Заметьте: ООП позволяет объектам ссылаться на самих себя, используя конструкцию $this. Когда Вы работаете с методом, используйте $this таким же образом, как когда Вы используете имя объекта за пределами класса.
Для использования методов, просто вызывайте их как обычные функции, указывая сперва, к какому объекту они относятся.
Получим значение свойства с помощью метода getProperty(), затем изменим его с помощью метода setProperty() и снова получим значение уже измененного свойства:
<?php class MyClass { public $prop1 = "Я - свойство класса!"; public function setProperty($newval) { $this->prop1 = $newval; } public function getProperty() { return $this->prop1 . "<br />"; } } $obj = new MyClass; echo $obj->getProperty(); // Получаем значение свойства $obj->setProperty("Я - измененное свойство класса!"); // Устанавливаем новое значение свойства echo $obj->getProperty(); // Получаем снова значение уже измененного свойста ?>
Обновите страницу в браузере и Вы увидите две строки:
Я - свойство класса! Я - измененное свойство класса!
"Мощь ООП становится очевидной при использовании нескольких экземпляров одного и того же класса."
<?php class MyClass { public $prop1 = "Я - свойство класса!"; public function setProperty($newval) { $this->prop1 = $newval; } public function getProperty() { return $this->prop1 . "<br />"; } } // Создаем два объекта $obj = new MyClass; $obj2 = new MyClass; // Получаем значение свойства $prop1 из обоих объектов echo $obj->getProperty(); echo $obj2->getProperty(); // Устанавливаем новые значения свойства для обоих объектов $obj->setProperty("Я - новое свойство класса!"); $obj2->setProperty("Я принадлежу второму экземпляру класса!"); // Выводим значения свойства $prop1 для обоих объектов echo $obj->getProperty(); echo $obj2->getProperty(); ?>
Обновите страницу и Вы увидите следующий результат:
Я - свойство класса! Я - свойство класса! Я - новое свойство класса! Я принадлежу второму экземпляру класса!
Как Вы можете видеть, ООП сохраняет объекты как отдельные элементы, что позволяет легко разделять различные части кода на мелкие "связки".
По материалам net.tutsplus.com
Перевод - Дмитрий Науменко.
P.S. Хотите двигаться дальше в освоении PHP и ООП? Обратите внимание на премиум-уроки по различным аспектам сайтостроения, включая программирование на PHP, а также на бесплатный курс по созданию своей CMS-системы на PHP с нуля с использованием ООП:
Понравился материал и хотите отблагодарить?
Просто поделитесь с друзьями и коллегами!
Смотрите также: