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

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


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

В PHP 4 все объекты передаются по значению. Это означает, что в РНР 4 следующий код:

$obj = new TestClass; $сору = $obj;

фактически создает три копии класса: в конструкторе, во время возвращения значения из конструктора в переменную $obj и когда переменной $сору присваивается значение $obj. Эта семантика полностью отличается от семантики большинство других ОО-языков, поэтому в РНР 5 она была отклонена.

В РНР 5 при создании объекта возвращается его дескриптор, который концептуально подобен ссылке в С++. Если приведенный выше код выполняется в РНР 5, то создается только один экземпляр объекта; копии не создаются.

Для того чтобы скопировать объект в РНР 5, необходимо использовать встроенный метод_clone ().. Для того чтобы в предыдущем примере сделать переменную

$сору действительной копией $ob j (а не просто еще одной ссылкой на один и тот же объект), необходимо модифицировать код:

$obj = new TestClass; $сору = $obj->_clone О;

В некоторых классах встроенный метод создания копии_clone () может не соответствовать потребностям разработчика, поэтому РНР позволяет переопределить

его. Внутри метода __clone () имеется псевдопеременная $this, представляющая

собой новый объект, в котором скопированы все свойства исходного объекта. Например, если в определенном выше классе TestClass используется стандартный метод _clone (), то будет скопировано свойство id. Вместо этого следует переписать

класс следующим образом:

class TestClass {

public static $counter = 0; public $id; public $other;

public function construct() { ~~

$this->id = self::$counter++;

}

public function clone() {

$this->id = self::$counter++;

}

}

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

Вероятно, читатели уже слышали о типовых проектах, но могут не знать, что они из себя представляют. Типовые проекты (designpatterns)— обобщенные решения классов проблем, с которыми часто сталкиваются разработчики программного обеспечения.

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




  Hostland.Ru

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