Страница 5 из 9 Абстрактные классы Абстрактным называется класс, который может использоваться только как базовый (то есть создавать объекты этого класса нельзя). Как и в любом нормальном базовом классе, в абстрактном классе вы можете определять методы и переменные. В абстрактном классе также можно определять абстрактные методы: методы, которые не реализованы в абстрактном классе, но которые обязательно должны быть реализованы в производных классах. Пример 6: Абстрактные классы <?php abstract class foo { protected $x; abstract function display(); function setX($x) { $this->x = $x; } } class foo2 extends foo { function display() { // Код } } ?> __call С PHP5 вы можете реализовать в классе специальный метод __call(), как метод для "отлова" всех нереализованных в данном классе методов. Метод __call (если он определён) вызывается при попытке вызвать недоступный или несуществующий метод. Пример 7: __call <?php class foo { function __call($name,$arguments) { print("Вызывали? Я - $name!"); } } $x = new foo(); $x->doStuff(); $x->fancy_stuff(); ?> Этот специальный метод может быть использован для реализации перегрузки методов: вы можете исследовать полученные аргументы и в зависимости от результата вызвать подходящий для данного случая закрытый метод, например: Пример 8: Перегрузка методов с помощью __call <?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"); ?> |