Обзор магических методов
Изучите __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 — локальная установка не требуется.
Все уроки этого курса
- Классы, свойства и методы
- Конструкторы и деструкторы
- Статические свойства и методы
- Обзор магических методов