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

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


Введение в ОО-лрограммирование 53

■ Частные (private) — к частной переменной или методу можно получить доступ только внутри класса, в котором определена данная переменная или метод. Это означает, что частную переменную или метод невозможно вызвать из класса-потомка, расширяющего данный класс.

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

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

Статические (или классовые) атрибуты и методы

Методы и свойства в РНР можно также объявлять как статические. Статический метод (static method) связан скорее с классом, а не с- экземпляром данного класса (то есть объектом). Статические методы вызываются с помощью синтаксиса ClassName: -. method(). Внутри статических методов псевдопеременная $thi s недоступна.

Статическое свойство (staticproperty) представляет собой переменную класса, которая связана с данным классом, а не с его экземпляром. Это означает, что изменение свойства отражается на всех экземплярах данного класса. Статические свойства объявляются с помощью ключевого слова static и доступны посредством синтаксиса ClassName: •. $property. В следующем примере иллюстрируется работа статических свойств:

class TestClass {

public static $counter;

}

$counter = TestClass::$counter;

Если требуется получить доступ к статическому свойству внутри класса, можно воспользоваться специальными ключевыми словами self и parent, которые соответствуют текущему и родительскому классу, соответственно. Использование ключевых слов self и parent позволяет избежать необходимости явной ссылки на класс по имени. Ниже приводится простой пример, в котором статическое свойство используется для назначения уникального целого идентификатора каждому экземпляру класса:

class TestClass {

public static $counter = 0;




  Hostland.Ru

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