Абстрактные классы и методы
1. Абстрактный метод нельзя вызвать, если он не был переопределен в производном классе. Собственно, написав функцию shape:: show() и поместив в нее вызов die(), мы как раз и гарантируем, что она обязательно будет переопределена в производном классе (иначе получим ошибку во время выполнения программы).
2. Объект абстрактного класса невозможно создать.
3. Любой класс, содержащий хотя бы один абстрактный метод, сам является абстрактным.
Абстрактные классы можно использовать только для одной цели: создавать от них производные. Сделаем из shape абстрактный класс, добавив ключевое слово abstract там, где это необходимо по логике.
<?php ## Абстрактный класс — геометрическая фигура,
abstract class Shape {
private $x=0, $y=0, $scale=1.0;
public function _construct() {
$this->show();
}
public function _destruct() {
$this->hide();
}
public final function moveBy($dx, $dy) {
$this->hide();
$this->x += $dx;
$this->y += $dy;
$this->show() ;
}
public final function resizeBy($coef) {
$this->hide();
$this->scale *= $coef;
$this->show() ;
}
public final function getCoord() { return array($this->x, $this->y); }
public final function getScale() { return $this->scale; }
// Абстрактные методы,
abstract protected function hide();
abstract protected function show();
}
?>
При объявлении абстрактного метода (например, show()) не нужно определять его тело — просто поставьте точку с запятой после его прототипа.
Дата добавления: 2015-08-26; просмотров: 1027;