Menu
Coddy logo textTech

Введение в магические методы

Часть раздела Объектно-ориентированное программирование путешествия по PHP на Coddy. Урок 44 из 91.

Magic methods — это специальные методы в PHP, которые начинаются с двойных знаков подчёркивания (__) и автоматически вызываются PHP в ответ на определённые события или действия. Ты уже использовал два из них: __construct() и __destruct().

Эти method позволяют подключаться к внутреннему поведению PHP и настраивать реакцию ваших object на распространённые операции.

Например, что происходит, когда вы пытаетесь вывести object? Или получить доступ к свойству, которого не существует? Magic methods дают вам контроль над такими ситуациями.

Вот краткий обзор наиболее часто используемых magic-методов:

MethodКогда вызывается
__construct()Object создаётся
__destruct()Object уничтожается
__toString()Object используется как string
__get()Обращение к неопределённому свойству
__set()Установка неопределённого свойства
__call()Вызов неопределённого method
__clone()Object клонируется
<?php
class Book {
    public function __construct(
        private string $title
    ) {}
    
    public function __toString(): string {
        return "Book: " . $this->title;
    }
}

$book = new Book("PHP Mastery");
echo $book;

Output:

Book: PHP Mastery

Без __toString() попытка выполнить echo для object вызвала бы ошибку. Magic method перехватывает это действие и вместо этого возвращает строковое представление. В следующих уроках мы подробно рассмотрим каждый magic method.

challenge icon

Задание

Легко

Давайте создадим систему каталога фильмов, которая познакомит вас с magic method. Вы создадите класс Movie, использующий __construct() для инициализации данных о фильме и __toString() для предоставления удобного строкового представления при выводе object.

Вы организуете код в двух файлах:

  • Movie.php: Создайте класс Movie, представляющий фильмы в вашем каталоге. Используйте constructor promotion, чтобы define private properties для $title (string), $director (string) и $year (integer). Implement magic method __toString(), который должен Return formatted string: "[title] ([year]) - Directed by [director]". Это позволяет напрямую выводить ваши object фильмов с помощью echo, без вызова отдельного method.
  • main.php: Подключите файл Movie. Вы получите три входных значения: название фильма, имя режиссёра и год выхода. Создайте instance Movie using эти values (преобразуйте год в integer). Затем просто напрямую выведите object фильма с помощью echo: method __toString() будет automatically called для формирования Output.

Магия __toString() заключается в том, что PHP автоматически вызывает его, когда ваш object используется в строковом контексте. Вместо записи echo $movie->getInfo(); вы можете просто написать echo $movie;, и PHP выполнит преобразование за вас. Благодаря этому с вашими object становится интуитивнее работать.

Попробуйте сами

<?php

require_once 'Movie.php';

// Прочитать ввод
$title = trim(fgets(STDIN));
$director = trim(fgets(STDIN));
$year = intval(fgets(STDIN));

// TODO: Создайте экземпляр Movie, используя входные значения

// TODO: Выведите объект movie напрямую (метод __toString() будет вызван автоматически)

?>
quiz iconПроверьте себя

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

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор PHP