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

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


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

Вместо использования операции new для создания объектов можно использовать следующий код:

$dbh = DB_Connection_Factory("Reporting");

Теперь для того, чтобы глобально изменить реализацию подключений, использующих интерфейс базы данных отчетов, необходимо только изменить Factory-блок.

Проект Singleton

Одним из наиболее досадных аспектов объектной модели РНР 4 является то, что в ней очень сложно реализовать синглтоны. Проект Singleton определяет класс, который имеет только один глобальный экземпляр. Существует множество ситуаций, в которых синглтон является естественным выбором. Web-браузер имеет только один на* бор cookie-файлов и только один профиль. Аналогично, класс, который является оболочкой для HTTP-запросов (включая заголовки, коды ответов и т.д.), имеет только один экземпляр для каждого запроса. Если используется драйвер базы данных, который не допускает совместного использования соединений, то можно применить сигл-тон, чтобы гарантировать, что для определенной базы данных в текущий момент открыто только одно соединение.

В РНР 5 существует множество методов для реализации синглтонов. Можно просто объявлять все свойства объекта как статические, но это приводит к созданию необычного синтаксиса для управления объектом, а экземпляр объекта фактически никогда не будет использоваться. Ниже приводится простой класс, реализующий типовой проект Singleton:

<?РНР

class Singleton { static $property; public function _construct 0 {}

Singleton::$property = "foo"; ?>

В дополнение к этому, так как в данном примере экземпляр класса Singleton фактически не создается, его невозможно передавать функциям или методам.

Один из удачных методов реализации синглтонов в РНР 5 заключается в использовании factory-метода для создания синглтона. Factory-метод сохраняет частную ссылку на исходный экземпляр класса и возвращает ее по запросу. Ниже приводится пример такого подхода, getlnstance () — factory-метод, который возвращает единственный экземпляр класса Singleton.

class Singleton {

private static $instance = false; public $property;

private function _construct О {}

public static function getlnstance() {

if(self::$instance === false) { self::$instance = new Singleton;

' }




  Hostland.Ru

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