ООП – Перевантаження та магічні методи

21.04.2022 0 By svvas

Перевантаження в 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 "Hello simplify";
	}
}

$obj = new MyClass;
echo $obj->getName(); // виклик методу (метод не існує)
echo $obj->getId(); // виклик методу (метод існує)
?>



// результат виконання

_call, method - getName is not exists (під час виклику getName)
Hello simplify (під час виклику getId)

Comments

comments