перегрузка функции

Перегрузка вызова несуществующих методов

Есть такое понятие, которое в php недоступно — перегрузка функций. Если бы в php можно было так делать, мы бы написали:

function A (){}
function A ($a){}
function A ($a, $b){}
function A (int $a, string $b, int $c){}

Это и есть перегрузка функции. Т.е. теперь, если написать A (1,2); — то вызовется функция из строки №3. А если у нас язык строго типизированный, то при определении функции можно указать и тип данных (см. строку №4).

В php этого сделать нельзя. Но можно съэмулировать. Если мы обращаемся к методу, которого нет, то php ищет и вызывает метод __call, куда первым параметром придет имя несуществующего метода, второй параметр — массив аргументов. См. пример:

class MyClass {
function __call($name, $params){
print("Попытка вызова метода $name со следующими параметрами: ");
print_r($params);}
}
$obj = new MyClass();
$obj->megaMethod(1,2,3,"четыре");

Т.е. в этом примере метод __call вызывается автоматически, если следует вызов метода, которого нет.




Добавить комментарий

Ваш e-mail не будет опубликован.