07. Основы ООП
Что такое ООП
ООП — это объектно-ориентированное программирование. Его цель — сделать код более понятным, гибким и логичным. Вместо кучи функций и переменных мы создаём объекты, которые описывают реальные вещи.Представь, что ты создаёшь игру. У тебя есть класс «Игрок», у каждого игрока — имя, уровень и здоровье. Объекты — это конкретные игроки с разными параметрами.
Класс и объект
Класс — это шаблон, чертёж. Объект — это конкретный экземпляр класса.
<?php
class User {
public $name;function __construct($name) {
$this->name = $name; // $this — это текущий объект
}
function hello() {
echo 'Привет, ' . $this->name . '!';
}
}
$user1 = new User('Анна');
$user2 = new User('Иван');
$user1->hello(); // Привет, Анна!
$user2->hello(); // Привет, Иван!
?>
Что делает конструктор
Метод __construct() вызывается автоматически при создании объекта. Он задаёт стартовые данные (например, имя пользователя).Свойства и методы
- Свойства — переменные внутри класса (характеристики объекта).
- Методы — функции внутри класса (действия объекта).
Пример: класс «Автомобиль»
<?php
class Car {
public $brand;
public $speed;function __construct($brand, $speed) {
$this->brand = $brand;
$this->speed = $speed;
}
function drive() {
echo $this->brand . ' едет со скоростью ' . $this->speed . ' км/ч';
}
}
$car = new Car('Toyota', 120);
$car->drive();
?>
Результат:
Toyota едет со скоростью 120 км/ч
Модификаторы доступа
PHP поддерживает три типа видимости свойств и методов:- public — доступно отовсюду.
- protected — доступно внутри класса и его потомков.
- private — доступно только внутри самого класса.
Пример
class BankAccount {
private $balance = 0;public function deposit($amount) {
$this->balance += $amount;
}
public function getBalance() {
return $this->balance;
}
}
$acc = new BankAccount();
$acc->deposit(1000);
echo $acc->getBalance(); // 1000
Таким образом, мы защищаем данные от прямого изменения: нельзя сделать `$acc->balance = 9999;`.
Наследование
Один класс может «наследовать» свойства и методы другого. Это позволяет не дублировать код.
<?php
class User {
public $name;
function __construct($name) {
$this->name = $name;
}
function hello() {
echo 'Привет, ' . $this->name;
}
}class Admin extends User {
function deleteUser($username) {
echo 'Пользователь ' . $username . ' удалён.';
}
}
$admin = new Admin('Анна');
$admin->hello(); // Привет, Анна
$admin->deleteUser('Иван'); // Пользователь Иван удалён.
?>
Ключевое слово parent
Если в дочернем классе нужно вызвать конструктор родителя:
class Admin extends User {
function __construct($name) {
parent::__construct($name);
echo ' (администратор)';
}
}
Инкапсуляция
Это принцип, при котором объект «сам управляет» своими данными, а доступ извне ограничен.Инкапсуляция — как капсула: вы можете взаимодействовать с ней через интерфейс, но не можете «влезть внутрь» напрямую.
Статические свойства и методы
Статические элементы принадлежат классу, а не конкретному объекту.
class Math {
public static $pi = 3.14159;public static function square($x) {
return $x * $x;
}
}
echo Math::$pi; // 3.14159
echo Math::square(5); // 25
Практический пример: счётчик пользователей
class User {
public static $count = 0;
public $name;public function __construct($name) {
$this->name = $name;
self::$count++;
}
}
$user1 = new User('Анна');
$user2 = new User('Иван');
echo 'Пользователей создано: ' . User::$count; // 2
Типичные ошибки новичков
- Путают `$this` и `self` (это разные вещи!).
- Забывают `new` при создании объекта.
- Пытаются обратиться к `private` свойствам извне.
- Забывают `parent::__construct()` при переопределении конструктора.
Практические задания
- Создай класс `Book` с полями `title` и `author`. Добавь метод `info()`, который выводит строку: «Название: ... Автор: ...».
- Создай класс `Library`, который хранит список книг в массиве и метод `showBooks()` для вывода их списка.
- Добавь статическое свойство `Book::$count`, увеличивающееся при каждом создании книги.
Итоги урока
Теперь вы знаете:- Что такое классы, объекты, свойства и методы.
- Как работает конструктор и модификаторы доступа.
- Как использовать наследование и статические свойства.
- Почему ООП делает код понятнее и удобнее для поддержки.