__call
З PHP5 ви можете реалізувати в класі спеціальний метод __call (), як метод для "вилову" всіх нереалізованих у даному класі методів. Метод __call (якщо він визначений) викликається при спробі викликати недоступний або неіснуючий метод.
<? Php
class foo {
function __call ($name, $arguments) {
print ("Викликали? Я - $ name!");
}
}
$X = new foo ();
$ X-> doStuff ();
$ X-> fancy_stuff ();
?>
Цей спеціальний метод може бути використаний для реалізації перевантаження методів: ви можете досліджувати отримані аргументи і залежно від результату викликати підходящий для даного випадку закритий метод, наприклад:
<? Php
class Magic {
function __call ($name, $arguments) {
if ($name == 'foo') {
if (is_int ($arguments [0])) $this-> foo_for_int ($arguments [0]);
if (is_string ($arguments [0])) $this-> foo_for_string ($arguments [0]);
}
}
private function foo_for_int ($x) {
print ("о, дивіться, ціле число!");
}
private function foo_for_string ($x) {
print ("о, дивіться, рядок!");
}
}
$X = new Magic ();
$X-> foo (3);
$X-> foo ("3");
?>