Вызовы методов, как и обращения к свойствам объекта, могут
быть перегружены с использованием методов __call, __get и __set.
Эти методы будут срабатывать только в том случае, если объект
или наследуемый объект не содержат свойства или метода,
к которому осуществляется доступ.
void __set ( string имя, mixed значение ) void __get ( mixed имя )
С помощью этих методов обращения к свойствам класса могут быть перегружены
с целью выполнения произвольного кода, описанного в классе.
В аргументе имя передаётся имя свойства, к которому
производится обращение. Аргумент значение метода __set()
должен содержать значение, которое будет присвоено свойству класса
с именем имя.
Пример 19-19. Пример перегрузки с использование __get и __set
<?php class Setter { public $n; private $x = array("a" => 1, "b" => 2, "c" => 3);
С использованием этого метода, методы класса могут быть перегружены
с целью выполнения произвольного кода, описанного в классе.
В аргументе имя передаётся имя вызванного
метода. Аргументы, которые были переданы методу при обращении,
будут возвращены чере аргументы.
Значение, возвращённое методом __call(), будет передано вызывающему оператору.
Пример 19-20. Пример перегрузки с использованием __call
<?php class Caller { private $x = array(1, 2, 3);
function __call($m, $a) { print "Вызван метод $m :\n"; var_dump($a); return $this->x; } }