ООП в PHP принципы и примеры кода
Современные крупные проекты не могут обойтись без объектно ориентированного программирования, которое дает гибкость и масштабируемость проекту. Так как большинство сайтов сделано на PHP мы рассмотрим именно ООП в PHP, которое даст проекту гибкость архитектуры посредством взаимодействия между class и method.
Что такое ООП в PHP
ООП (объектно-ориентированное программирование) — это парадигма, в которой всё строится вокруг объектов, объединяющих данные и функции работающие с ними.
На примере PHP ООП работает через классы, объекты, наследование, инкапсуляцию и полиморфизм.
Что такое CLASS на PHP
CLASS на PHP — это некий шаблон функционала, и по его подобию создаются объекты для работы с данными. Этот шаблон описывает какие свойства (переменные) и методы (функции) будут у объекта для осуществления различных операций.
<?php
class User {
public $name; // свойство $name
public $email; // свойство $email
// Конструктор
public function __construct($name, $email) {
$this->name = $name; // передаем свойству $name данные из объекта
$this->email = $email; // передаем свойству $email данные из объекта
}
// Метод класса
public function introduce() {
return "Привет! Меня зовут {$this->name}, мой email: {$this->email}";
}
}
// Создание объекта класса User
$user = new User("IT шаман", "it_shaman@learn-top.ru");
echo $user->introduce();
?>
В коде выше мы создали класс с двумя свойствами для имени и email адреса, создали конструктор для принятия входящих данных, создали метод для возвращения информации с входящими данными. Разбор кода более детальней:
- class User — объявления класса (создание).
- $name и $email — свойства класса (переменные внутри класса).
- __construct() — конструктор класса (вызывается самый первый при создании объекта).
- $this — ссылка на текущий объект или свойству и методу внутри класса.
- $user — объект вызываемого класса.
Принцип инкапсуляции ООП в PHP
Инкапсуляция — это ограничение доступа к методам и свойствам класса. Мы можем сделать доступ публичным указав public перед объявлением свойства или метода, private запретит обращение к этому свойству или методу вне класса (можно только внутри класса), protected разрешает доступ только внутри класса и его наследникам.
<?php
class BankAccount {
private $balance = 0;
public function deposit($amount) {
$this->balance += $amount;
}
public function getBalance() {
return $this->balance;
}
}
$account = new BankAccount();
$account->deposit(500);
echo $account->getBalance(); // 500
?>
Ограничение доступа нужно для того чтоб предотвратить какие либо изменения данных извне.
Принцип наследования ООП в PHP
Наследование позволяет на основе существующего класса создавать новый класс, наследуя тем самым его свойства и методы. Данный прием позволяет избежать дублирования кода и способствует расширению изначального функционала, класса родителя.
<?php
class Car {
public $brand;
public function drive() {
echo "Машина {$this->brand} едет!";
}
}
class ElectricCar extends Car {
public $batteryLevel = 100;
public function charge() {
echo "Зарядка батареи... уровень: {$this->batteryLevel}%";
}
}
$tesla = new ElectricCar();
$tesla->brand = "Tesla";
$tesla->drive(); // Машина Tesla едет!
$tesla->charge(); // Зарядка батареи...
?>
Наследование позволит вам не только принять свойства и методы родительского класса, но и создать свои, дополнив тем самым функционал.
Принцип полиморфизма ООП в PHP
Полиморфизм позволяет переопределять свойства и методы родительского класса, то есть, изменять их изначальную информацию на новую.
<?php
class Animal {
public function sound() {
echo "Животное издает звук.";
}
}
class Dog extends Animal {
public function sound() {
echo "Собака лает.";
}
}
class Cat extends Animal {
public function sound() {
echo "Кошка мяукает.";
}
}
$animals = [new Dog(), new Cat(), new Animal()];
foreach ($animals as $a) {
$a->sound();
echo "<br>";
}
?>
Каждый объект будет выдавать разную информацию, хотя метод по большому счету один и тот же от родительского класса.
Interfaces (интерфейсы) в PHP
Интерфейсы это как шаблон для любого класса, который определяет какие какие методы наследуемый класс обязан содержать в себе.
<?php
interface Logger {
public function log($message);
}
class FileLogger implements Logger {
public function log($message) {
file_put_contents("log.txt", $message . PHP_EOL, FILE_APPEND);
}
}
?>
Это удобно, если задача подразумевает обязательные методы у разных классов.
Traits (трейты) в PHP
Trait — это возможность вставлять готовые методы в классы не используя наследования других классов. Либо использование наследования других классов, но как дополнение трейты могу давать отдельный функционал.
<?php
trait Timestamps {
public function currentTime() {
return date('Y-m-d H:i:s');
}
}
class Post {
use Timestamps;
}
$post = new Post();
echo $post->currentTime();
?>
Trait помогает избежать дублирования функционала между классами.
Итоги разработки ООП на PHP
Как уже следует понимать ООП на PHP это основа современной и профессиональной WEB разработки. Для более четкого понимания работы объектов, классов, свойств, методов и т.д. нужно просто больше практики. Создавая сложные web приложения с использованием ООП и всех его стандартов написания кода, вы не только себе облегчите доработку программы в будущем, но и вашим коллегам будет более понятно как работать с вашим кодом в будущем. Приводим наглядный пример в таблице:
| Термин | Описание | Пример |
|---|---|---|
| Class | Шаблон для создания объектов | class User {} |
| Object | Экземпляр класса | $user = new User(); |
| Property | Переменная внутри класса | public $name; |
| Method | Функция внутри класса | public function show() {} |
| Constructor | Метод, вызываемый при создании объекта | __construct() |
| Inheritance | Наследование свойств и методов | class Child extends Parent |
| Encapsulation | Сокрытие данных | private $data; |
| Polymorphism | Переопределение методов | function show() {} |
| Interface | Задает контракт методов | interface Logger {} |
| Trait | Вставка общего кода | use TraitName; |