Для свойств и методов можно определить уровень доступа. В PHP определены три таких уровня:
· public (открытый): Метод/свойство доступны из любого места в коде;
· private (закрытый): Закрытые методы или свойства доступны только внутри класса;
· protected (защищённый): Защищённый метод или свойства доступны только внутри класса, где они были объявлены, и из его производных классов.
Для задания уровня доступа при объявлении имени свойства указывается слово, соответствующее уровню доступа (public, private и protected соответственно). Перед ключевым словом function для метода также может быть указано слово для определения уровня доступа. Если перед именем метода не указывается ключевое свойство для уровня доступа, то считается, что метод доступа public.
При объявлении свойств вместо ключевого слова public можно использовать ключевое слово var, используемое в версиях PHP, до версии 5. В старых версиях РНР ограничивать доступ к членам класса было нельзя, все члены класса неявно имели модификатор public, и для описания свойств применялось ключевое слово var. В РНР 5 использовать его рекомендуется только в целях совместимости со старыми версиями.
Пример с различными уровнями доступа
Пример:
<?php // определяем класс class Fio_Class { public $first_name; protected $second_name; private $family;
class Employer_Class extends Fio_Class { public $department;
function set_name2($par1, $par2, $par3, $par4 ) { // метод определен без указания уровня доступа значит, // будет public корректный вызов $this->set_name( $par1, $par2, $par3 );
// вызываем public метод // корректный вызов $this->set_first( $par1 );
// вызываем protected метод // корректный вызов $this->set_second( $par2 );
// вызываем private метод // !!! не корректный вызов !!! $this->set_family( $par3 );
// public свойство, можем присвоить значение $this->first_name = $par1;
// protected свойство, можем присвоить значение $this->second_name = $par2;
// !!! private свойство, значение присваивать нельзя $this->$family = $par3; } }
// создаем объект $obj1 = new Employer_Class();
// вызываем метод для объекта $obj1->set_name2( "Иван", "Иваныч", "Иванов", "Менеджер" );
// будет ошибка, поскольку пытаемся получить доступ // к private свойству echo $obj1->family . "<br />";
// будет ошибка, поскольку пытаемся получить доступ // к protected свойству echo $obj1->second_name . "<br />"; ?>