Приднестровская поддержка XOOPS
В PHP 5 порядок определения и способы использования классов не претерпели существенных изменений. В действительности, код из листинга 1 будет работать в PHP 5 так, как положено. Однако такой способ определения класса уже не применяется. В листинге 3 представлен новый вариант определения класса, рассмотренного нами в предыдущем примере.
Листинг 3
class myPHP5Class {
public $my_variable;
public function my_method($param) {
echo "Вызван метод my_method($param)!\n";
echo "Значение внутренней переменной: ";
echo "{$this->my_variable}\n";
}
}
Отличие заключается в использовании новой важной особенности в модели объектного ориентирования PHP 5 — контроле доступа.
В PHP 4 не существовало понятия контроля доступа внутри объектов. Если сторонний разработчик использовал класс myPHP4Class, можно было свободно изменять или считывать значение переменной $my_variable. С другой стороны, в PHP 5 объектная модель предусматривает три уровня доступа к членам класса, ограничивающие данные, которые могут извлекаться в сценариях. Это уровни public, private и protected; их можно применять и к методам, и к свойствам класса, как показано в листинге 3.
К членам класса, которые объявлены как public (общедоступные), доступ может быть осуществлен из любого места в пределах сценария. С помощью объекта их можно вызывать или видоизменять либо изнутри самого объекта, либо за его пределами. Наоборот, доступ к членам класса, которые были объявлены как private (закрытые), может быть осуществлен только из экземпляра этого класса с помощью переменной $this. Посмотрите, как изменился код, представленный в листинге 4, по сравнению с кодом из листинга 3.
Листинг 4
class myPHP5Class {
private $my_variable;
public function my_method($param) {
echo " Вызван метод my_method($param)!\n";
echo "Значение внутренней переменной: ";
echo "{$this->my_variable}\n";
}
}
Если создать экземпляр myPHP5Class, то при обращении к свойству $my_variable извне объекта возникнет ошибка PHP:
$myobject = new myPHP5Class();
/* Это допустимая запись, поскольку my_method объявлен как public */
$myobject->my_method("MyParam");
/* Эта запись приведет к возникновению ошибки, поскольку свойство $my_variable объявлено как private */
$myobject->my_variable = 10;
При выполнении предыдущего кода будет выведено следующее сообщение об ошибке:
Вызван метод my_method(MyParam)!
Значение внутренней переменной:
Fatal error: Cannot access private property myPHP5Class::$my_variable in ...
(Неисправимая ошибка: Невозможен доступ к закрытому свойству myPHP5Class::my_variable в ...)
Третьим и последним уровнем доступа в PHP является protected (защищенный). Этот уровень подобен уровню private, поскольку он запрещает внешний доступ к члену класса. Однако в отличие от уровня private, ограничивающего доступ только к тому классу, в котором он определен, уровень protected разрешает доступ как из него самого, так и из любых дочерних классов. Более подробно о дочерних классах и наследовании мы поговорим в разделе “Наследование классов” далее в этой инструкции.
Отправитель | Нити |
---|
3 пользователь(ей) активно (2 пользователь(ей) просматривают Инструкции)
Участников: 0 Гостей: 3 далее... |