Страница 2 из 20 Новые уровни доступа private и public В PHP5 добавлены новые модификаторы уровня доступа для переменных классов. Как и во многих других языках программирования, они носят названия private, protected и public. Private - самый ограниченничивающий модификатор. Private переменная класса может быть использованна только в классе, в котором объявленна. К ней невозможно обратиться из другого программного кода. Protected - расширение области private, добавляющее к ней возможность обращаться к переменной из классов-потомков. Public - расширяющий protected модификатор, задающий наиболее широкую область доступа. К возможности использовать переменную в классах-потомках, добавляется возможность обращаться к переменной непосредственно из другого кода. Строго говоря, public не является новой областью доступа. Ранее в PHP все переменные классов являлись public переменными. Private переменные используются для алгоритмов, которые используются только в текущем классе и не могут быть переопределенны в классах-потомках. Protected может быть использован, когда организовывается семейство объектов, обладающих сходными алгоритмами и организованных в иерархию. Использование public переменных, обычно, не является хорошей практикой но иногда оправданно. Их можно использовать, если у класса много свойств, которые должны быть доступны всем алгоритмам, использующим этот класс. Аналогично, private/protected/public мидификаторы применяются к методам класса. Методы, объявленные без модификатора, являются public методами. Если метод или переменная переопределяются в классе-наследнике, то уровень доступа должен быть таким-же или выше. Например, protected метод в классе-потомке можно сделать public, но нельзя private. Для примера рассмотрим классы NewClass и NewClass1. class NewClass { // new PHP5 modifiers private $myPrivateVar = 'myPrivateVar'; protected $myProtectedVar = 'myProtectedVar'; public $myPublicVar = 'myPublicVar'; // old PHP declaration var $myVar = 'myVar'; } class NewClass1 extends NewClass { function getProtectedVar() { return $this->myProtectedVar; } } NewClass содержит несколько переменных с разными областями доступа. NewClass1 используется для тестирования областей видимости, связанных с наследованием. Создаем объекты классов: $c = new NewClass(); $c1 = new NewClass1(); Обращаемся к переменным: print $c->myPrivateVar; Непосредственное обращение к private переменной приводит к ошибке. print $c->myProtectedVar; Непосредственное обращение к protected переменной приводит к ошибке. print $c->myPublicVar; Обращение к public переменной возвращает её значение. print $c->myVar; Обращение к переменной, объявленной в старом стиле, равносильно обращению к public переменной. print $c1->myPrivateVar; Private переменная не была унаследованна классом NewClass1. Обращение к ней равнозначно обращению к необъявленной переменной. print $c1->myProtectedVar; Protected переменная была унаследованна и непосредственное обращение к ней приводит к ошибке. Для проверки, что она была унаследованна вместе с начальным значением, можно вызвать "print $c1->getProtectedVar();". print $c1->myPublicVar; Public переменная была унаследованна и обращение к ней возвращает её значение. |