Перевантаження в 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
?>