Пример 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.