Перевантаження в PHP дає можливість динамічно “створювати” властивості і методи. Такі методи і властивості обробляються за допомогою” чарівних ” методів, які можна створити в класі для різних видів дій.
Перевантаження властивостей
Звернення до властивостей об’єкта можуть бути перевантажені з використанням методів __get і __set. Ці методи будуть спрацьовувати в тому випадку, якщо об’єкт не містить властивості, до якої здійснюється доступ. Синтаксис:
<?php public void __set (string $name , mixed $value) public mixed __get (string $name) ?>
Приклад використання:
<?php
class MyClass {
public $c = "c value";
public function __set($name, $value) {
echo "__set, property - {$name} is not exists \n";
}
public function __get($name) {
echo "__get, property - {$name} is not exists \n";
}
}
$obj = new MyClass;
$obj ->a = 1; // запис у властивість (властивість не існує)
echo $obj ->b; // отримуємо значення властивості (властивість не існує)
echo $obj ->c; // отримуємо значення властивості (властивість існує)
?>Результат:
__set, property - a is not exists __get, property - b is not exists c value
Перевантаження методів
Виклики методів можуть бути перевантажені з використанням методів __call. Ці методи будуть спрацьовувати в тому випадку, якщо об’єкт не містить методу, до якого здійснюється доступ. Синтаксис:
<?php public mixed __call (string $name , array $arguments) ?>
Приклад:
<?php
class MyClass {
public function __call($name, $arguments) {
return "__call, method - {$name} is not exists \n";
}
public function getId() {
return "AH-15474";
}
}
$obj = new MyClass;
echo $obj->getName(); // виклик метода (метод не існує)
echo $obj->getId(); // виклик метода (метод не існує)
?>Результат:
__call, method - getName is not exists (при вызове getName) AH-15474 (при вызове getId)
Магічний метод __toString
Метод __toString() буде спрацьовувати при спробі перетворення класу в рядок. Наприклад, echo $obj;.
Синтаксис:
<?php
public string __toString()
?>Приклад:
<?php
class MyClass {
public function __toString() {
return "MyClass class";
}
}
$obj = new MyClass;
echo $obj; // результат: MyClass class
?>Магічний метод __invoke()
Метод __invoke() викликається, коли об’єкт намагаються викликати як функцію.
Синтаксис:
<?php
mixed __invoke ([ $... ] )
?>Приклад:
<?php
class MyClass {
public function __invoke($a) {
return $a;
}
}
$obj = new MyClass;
echo $obj(75); // результат: 75
?>