По умолчанию доступ к свойствам и методам класса ничем не ограничен, но не всегда это является допустимым. Например, метод setname из предыдущего раздела не позволяет присвоить свойству name значение, превышающее по длине 10 символов.
function set_name (Stext)
{
if (strlen(Stext) <= 10)
{
$this->name = $text;
}
Но при этом остается возможность присвоения некорректного значения свойству name напрямую, например:
$this->name = "слишком длинное имя";
Решение заключается в ограничении доступа к свойствам и методам класса при помощи модификаторов доступа. В РНР существуют три модификатора доступа:
• public — нет ограничений на доступ.
• private — доступ разрешен только изнутри класса.
• protected — доступ разрешен только изнутри класса и всех его потомков.
По умолчанию все свойства и методы объявляются как public, что означает отсутствие ограничений на доступ к ним снаружи класса. Но если свойство или метод объявлено как private, доступ к нему из кода за пределами класса будет заблокирован. Ниже приведен пример попытки доступа к приватному свойству name:
|
|
<?php
class Animal
{
private $name;
function set_name ($text)
{
$this->name = $text;
}
function get_name ()
{
test.php on line 19
Наряду с приватными свойствами можно объявить и приватные методы класса. Например, метод getname может быть объявлен как приватный:
<?php
class Animal
{
var $name;
function set_name ($text)
{
$this->name = $text;
}
private function get_name ()
{
return $this->name;
}
}
$lion = new Animal;
$lion->set_name ("Бонифаций");
echo "Имя нового льва: ", $lion->get_name (), ".";
?>
Fatal error: Call to private method Animal:: get_name () from
context '' in test.php on line 19
При использовании ключевого слова protected свойства и методы класса будут доступны только изнутри данного класса, а также из всех классов, порожденных на основе данного.