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

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


64 Глава 2 Объектно-ориентированное программирование...

Если программист объявляет класс в качестве класса, который реализует интерфейс, когда фактически это не так, то возникнет ошибка трансляции. Например, предположим, что создается класс DB_Foo, в котором не реализован ни один метод:

<?РНР

require "DB/Connection.inc";

class DB_Foo implements DB Connection {}

?> _ i j

При обработке данного класса будет сгенерирована следующая ошибка:

Fatal error: Class db_foo contains 2 abstract methods and must

be declared abstract (db connection::execute, db connection:: prepare)

in /Users/george/Advanced PHP/examples/chapter-2/14.PHP on line'3 (Неисправимая ошибка: класс db_foo содержит 2 абстрактных метода и должен объявляться как абстрактный)

РНР не поддерживает множественное наследование. То есть, класс не может происходить более чем от одного класса Например, следующий синтаксис неверен: class A extends В, с {}

Но так как в интерфейсе указываются только прототипы, а не реализация, то класс может реализовать произвольное число интерфейсов. Это означает, что если существует два интерфейса А и В, то в классе С можно реализовать оба интерфейса следующим образом:

<?РНР

interface А {

public function abba();

interface В {

public function bar();

class С implements А, В { public function abba() {

// abba;

}

public function bar() {

// bar;

>'

?>

Промежуточным этапом между интерфейсами и классами являются абстрактные классы. Абстрактный класс (abstract class) может содержать, как конкретизированные (которые наследуются), так и абстрактные методы (которые должны быть определены классами-наследниками). В следующем примере показан абстрактный класс А, в котором полностью реализуется метод аЬЬа(), а метод Ьаг() определяется как абстрактный.



  • Палезные статьи для оптимизатора

  Hostland.Ru

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