Пример 1: использование метода

Код:

class A {

public function __construct() {

print __METHOD__ . '<br />';

}

 

public function __call( $function, $params ) {

print ">> Function {$function} was called with params [ " .

implode( $params, ', ' ) .

" ]<br />";

if( $function == 'someReallyBigFunctionName' )

print '<< Cool! someReallyBigFunctionName was called! <br />';

print __METHOD__ . '<br />';

}

 

public function __destruct() {

print __METHOD__ . '<br />';

}

}

 

$a = new A();

$a->f( "it's", "mtuci", "courses of", "programming" );

$a->someReallyBigFunctionName();

 

Результат:

A::__construct
>> Function f was called with params [ it's, mtuci, courses of, programming ]
A::__call
>> Function someReallyBigFunctionName was called with params [ ]
<< Cool! someReallyBigFunctionName was called!
A::__call
A::__destruct

Теперь рассмотрим практические аспекты реализации этого метода. Чтобы не плодить множество функций с, возможно, приблизтельно одинаковой логикой или общей смысловой частью, их можно поместить в магический метод __call, реализовать их распознавание при помощи оператора switch и выводить результаты для каждой функции. Кроме того, можно реализовать отладку ошибок с его помощью.

__get, __set, __isSet, __toString

Я не буду сейчас заострять внимание на этих методах. Если у вас есть желание, вы можете прочесть об этом на официальном сайте php.