Профессиональное программирование на PHP

Страница 62 из 591


Краткое введение в типовые проекты 65

abstract class A {

public function abbaO {

// abba

}

abstract public function bar();

}

Поскольку метод bar () полностью не определен, его нельзя использовать самостоятельно. Однако могут быть производные от него методы, и до тех пор, пока производный класс реализует все абстрактные методы класса А, метод bar () может использоваться. Класс В расширяет А и реализует метод bar (), а это означает, что данный метод может использоваться без каких-либо проблем.

class В extends А { public function bar() {

$this->abba ();

}

}

$b = new В;

Поскольку абстрактные классы фактически реализуют некоторые из своих методов, они считаются классами с точки зрения наследования. Это означает, что класс может расширять только один абстрактный класс.

Интерфейсы позволяют программисту предотвратить ошибки, когда объявляются классы, задуманные как полиморфные, однако они только на половину предотвращают ошибки делегирования. Программист должен гарантировать, что функция, ожидающая объект для реализации определенного интерфейса, действительно получает такой объект.

Конечно, можно выполнить такую проверку непосредственно в коде, вручную проверив класс объекта с помощью функции is_a (), как в следующем примере.

funct i on addDB($ dbh) {

if(!is_a($dbh, nDB_Connection")) {

trigger_error("\$dbh не является объектом класса DB_Connection", Е USER ERROR); }

$this->dbh - $dbh;

}

Такой метод имеет два недостатка.

 Он требует множество излишнего кода для проверки типа передаваемого параметра.

 Он не является частью объявления прототипа для функции. Это означает, что невозможно вызвать такой вид проверки параметра в классах, которые реализуют данный интерфейс.

В РНР 5 для устранения таких недостатков введена возможность контроля типа или выбора типа (type-checking/type hinting) в объявлениях и прототипах функций. Для того чтобы использовать эту возможность для функции, она объявляется следующим образом:




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006