Developers/Object oriented programming in PHP/Properties/ru

Как инициализировать свойства
Существует три возможности:


 * назначение:  позволяет непосредственно назначить значение для свойства класса, в то время как   можно использовать всюду внутри класса.
 * конструктор: определение метода под названием __construct переназначает стандартную процедуру оператора new и даёт возможность устанавливать определённые значения для необходимых свойств автоматически, при создании нового объекта текущего класса.
 * методы setter: методы setter и getter в Arcavias в основном используются в элементах, так объекты временно хранят данных для распространения их внутри кода.

Замечание: не забывайте о стандартах кодирования: декларируемые private свойства (также как и private / protected методов) всегда имеют префикс подчёркивания.

Для элемента вроде MShop_Product_Item_Default это выглядит так (существует соответствующий setter / getter и для всех остальных свойств, разумеется):

Замечание о производительности:
 * Не назначайте для свойства класса значение по умолчанию непосредственно, если оно сразу же будет переназначено в конструкторе.
 * В элементах используйте лишь один ассоциативный массив пар ключ/значение, так как это возвращается методами базы данных.
 * Отложите получение и преобразование данных, пока они действительно не понадобятся, как это делается в getLabel.

Смотрите также:


 * Назначение: http://php.net/manual/en/language.operators.assignment.php
 * Конструкторы / Деструкторы: http://php.net/manual/en/language.oop5.decon.php

Видимость свойств

 * public : опасно декларировать свойство, как public, так как каждый сможет в любое время изменить его, а после инициализации свойства контроль над ним будет потерян. Поэтому не используйте для свойств ключевое слово public!
 * protected : свойства, объявленные как protected</tt>, могут быть доступны лишь в определении текущего класса или в его субклассах. Следовательно, не только каждый метод класса может оперировать со свойством protected</tt>, но и все методы в его субклассах. А это может вести к несовместимости кода, когда субклассы переназначают protected</tt> свойства своих суперклассов. Используйте это крайне внимательно.
 * private : все свойства необходимо декларировать как private</tt>, чтобы быть уверенным, что оперировать ими могут лишь методы собственного класса в его определении. Декларируемые как private</tt> свойства доступны только изнутри определения класса, исключены из наследования субклассами и, таким образом, не могут быть переназначены. А это улучшает и согласованность и безопасность кода.

Использование в Arcavias:

Все свойства классов объявляются как private</tt>. Например, класс MShop_Product_Item_Default</tt> определяет одно приватное свойство _values</tt>, хранящее в массиве все данные элемента:

Замечание: не забывайте о стандартах кодирования: декларируемые private</tt> свойства (также как и private</tt> / protected</tt> методов) всегда имеют префикс подчёркивания.

Смотрите также:


 * http://php.net/manual/en/language.oop5.properties.php
 * http://php.net/manual/en/language.oop5.visibility.php

Статичные свойства
Обычно не статичные свойства связаны с конкретным объектом, а каждый из объектов имеет собственное "конкретное свойство", значение которого не идентично значению в других таких же объектах. Декларируемые как static свойства инициализируются лишь однажды во время выполнения, и для него может быть лишь один "экземпляр" с единственным назначенным значением.

Для свойств в Arcavias не часто используется ключевое свойство static</tt>. В MShop</tt> оно используется для включения путей, что используется в классах для блочного тестирования, смотрите, например, класс TestHelper</tt> в lib/mshoplib/tests/</tt>. Наиболее часто статические свойства используются в объектах кеша, и они используются всеми экземплярами объектов определённого класса, например, в классе TestHelper</tt>:

Оба свойства этого класса доступны посредством ключевого слова <tt>self::</tt>:

Смотрите также:


 * http://php.net/manual/en/language.oop5.static.php

<< Назад: классы | Далее: методы >>