double arrow

Неявное объявление свойств

Давайте остановимся на одной интересной особенности РНР. Речь идет о том, что операторы:

$this->property = 101;

$obj->property = 303;

допустимы и не вызывают ошибку даже в случае, если свойство $property в классе не объявлено. В этом отношении объекты очень похожи на ассоциативные массивы: в них можно создавать произвольные ключи, а также возможно ограничить доступ к некоторым из них (например, с помощью модификатора private). Применим даже такой синтаксис:

$key = "test";

$obj->$key = 314;

При этом в объекте $obj создастся свойство с именем Stest и значением 314, а РНР даже "не пикнет", в том числе в режиме контроля ошибок E_ALL|E_STRICT.

Общие рекомендации

Есть несколько канонических советов, характерных для объектно-ориентированного подхода и любых языков программирования.

Вот некоторые из них:

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

· Не создавайте открытых методов "про запас". Если в будущем какой-то из них понадобится в вызывающей программе, всегда можно изменить его модификатор доступа. Помните: "открыть" метод всегда проще, чем "закрыть" его впоследствии (ибо, сменив модификатор метода с public на private, нам придется проверить все скрипты, которые используют наш класс).

· Группируйте открытые методы в начале класса, а закрытые - в его конце. Это поможет выделить интерфейс класса (методы, доступные извне).

· Старайтесь не создавать открытые свойства вообще. Делайте их закрытыми (private) или, в крайнем случае, - защищенными (protected). Доступ к свойствам лучше организовывать при помощи открытых методов - так можно, например, запретить изменение свойства, или выполнить некоторые действия перед его считыванием.

Класс - self, объект - $this

Классы выступают в качестве шаблонов для объектов. Для того чтобы обратиться к внутреннему содержимому объекта, используется ключевое слово Sthis. Для обращения к внутреннему содержимому класса используется ключевое слово self (рис. 1). Как видно, ключевое слово $this снабжено символом доллара, чтобы подчеркнуть связь с переменными. В то время как ключевое слово self обходится без символа доллара - это указание на то, что обращаемся мы не к переменной.

Рис. 1. self используется дм обращения к внутренним переменным и методам класса, а $this - к переменным и методам объекта

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

Статическое свойство недоступно через обращение $this->property или $obj->property. Вместо этого используется оператор:: и либо имя класса (ИмяКласса:: $property), либо ключевое слово self {self:: $property).

Статический метод во время своего запуска не получает ссылку $this, поэтому он может работать только со статическими членами (свойствами и другими методами) своего класса.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: