Перегрузка в 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
?>