0Pricing
PHP Academy · Урок

Обзор магических методов

Изучите __toString, __get, __set и другие магические методы PHP

«Обзор магических методов» — бесплатный урок PHP Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения PHP Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс PHP Academy содержит 4 уроков всего.

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

Магические методы — это специальные методы PHP с префиксами из двух символов подчёркивания. Движок PHP автоматически вызывает их в определённых ситуациях. Они предоставляют точки расширения для поведения объектов.

Основные понятия

Ключевые понятия магических методов PHP:

  • __toString() — преобразование объекта в строку
  • __get/__set/__isset/__unset — перехват доступа к свойствам
  • __call/__callStatic — перехват вызовов методов
  • __invoke() — вызываемый объект

__toString

Пример:

<?php
class Money {
    public function __construct(
        private float  $amount,
        private string $currency
    ) {}

    public function __toString(): string {
        return number_format($this->amount, 2) . ' ' . $this->currency;
    }
}

$price = new Money(9.99, 'USD');
echo $price;            // 9.99 USD
echo 'Price: ' . $price; // Price: 9.99 USD

__get и __set

Продолжение:

<?php
class DynamicObject {
    private array $data = [];

    public function __get(string $name): mixed {
        return $this->data[$name] ?? null;
    }

    public function __set(string $name, mixed $value): void {
        $this->data[$name] = $value;
    }
}

$obj = new DynamicObject();
$obj->name = 'Alice';
echo $obj->name;  // Alice

__isset и __unset

Практика:

<?php
class Model {
    private array $attributes = [];

    public function __set(string $k, mixed $v): void { $this->attributes[$k] = $v; }
    public function __get(string $k): mixed { return $this->attributes[$k] ?? null; }
    public function __isset(string $k): bool { return isset($this->attributes[$k]); }
    public function __unset(string $k): void { unset($this->attributes[$k]); }
}

$m = new Model();
$m->email = 'a@b.com';
var_dump(isset($m->email));  // true
unset($m->email);
var_dump(isset($m->email));  // false

__call и __callStatic

Подробнее:

<?php
class FluentQuery {
    private array $clauses = [];

    public function __call(string $name, array $args): static {
        $this->clauses[$name] = $args[0] ?? null;
        return $this;
    }

    public function toSql(): string {
        return 'SELECT * FROM '
            . ($this->clauses['from'] ?? 'unknown');
    }
}

echo (new FluentQuery())->from('users')->toSql();
// SELECT * FROM users

__invoke

Расширенное использование:

<?php
class Multiplier {
    public function __construct(private float $factor) {}

    public function __invoke(float $value): float {
        return $value * $this->factor;
    }
}

$double = new Multiplier(2);
echo $double(5);   // 10
echo $double(21);  // 42

$funcs = [new Multiplier(2), new Multiplier(3)];
foreach ($funcs as $fn) echo $fn(4) . ' '; // 8 12

__clone

Практический шаблон:

<?php
class Config {
    private array $data = [];

    public function set(string $k, mixed $v): self {
        $this->data[$k] = $v;
        return $this;
    }

    public function __clone() {
        // deep clone nested objects if needed
    }
}

$original = (new Config())->set('theme', 'dark');
$copy = clone $original;  // triggers __clone

__debugInfo

Рекомендации:

<?php
class ApiClient {
    public function __construct(
        private string $baseUrl,
        private string $apiKey  // sensitive!
    ) {}

    public function __debugInfo(): array {
        return [
            'baseUrl' => $this->baseUrl,
            'apiKey'  => '***' . substr($this->apiKey, -4),  // mask key
        ];
    }
}

var_dump(new ApiClient('https://api.example.com', 'secret123'));
// Shows masked key

Практический шаблон

Объединим всё в практическом шаблоне для магических методов PHP.

Распространённые ошибки

Избегайте этих распространённых ошибок при работе с магическими методами PHP:

  • Используйте __toString(), чтобы объекты выводились осмысленно
  • __get/__set позволяют применять шаблоны прокси и декоратора
  • __invoke позволяет использовать объекты как вызываемые (полезно при использовании функции array_map)
  • __debugInfo предотвращает появление конфиденциальных данных в var_dump

Быстрая проверка

Какой магический метод позволяет вызывать объект PHP как функцию?

Итоги: магические методы PHP

Вы изучили магические методы PHP. Запомните основные моменты:

  • Используйте __toString(), чтобы объекты выводились осмысленно
  • __get/__set позволяют применять шаблоны прокси и декоратора
  • __invoke позволяет использовать объекты как вызываемые (полезно при использовании функции array_map)
  • __debugInfo предотвращает появление конфиденциальных данных в var_dump

Часто задаваемые вопросы

Урок «Обзор магических методов» бесплатный?

Да — полный текст урока «Обзор магических методов» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс PHP Academy, подпишись на CoddyKit PRO. Курс PHP Academy содержит 4 уроков всего.

Чему я научусь в уроке «Обзор магических методов»?

Изучите __toString, __get, __set и другие магические методы PHP Ты практикуешь PHP Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать PHP Academy?

Предыдущий опыт не требуется. PHP Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Обзор магических методов»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке PHP Academy?

Да. Каждый урок PHP Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Классы, свойства и методы
  2. Конструкторы и деструкторы
  3. Статические свойства и методы
  4. Обзор магических методов
← Назад к PHP Academy