Введение в PHP5 - Абстрактные классы
ОГЛАВЛЕНИЕ
Абстрактные классы
Абстрактным называется класс, который может использоваться только как базовый (то есть создавать объекты этого класса нельзя). Как и в любом нормальном базовом классе, в абстрактном классе вы можете определять методы и переменные.
В абстрактном классе также можно определять абстрактные методы: методы, которые не реализованы в абстрактном классе, но которые обязательно должны быть реализованы в производных классах.
Пример 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");
?>