Управление доступом к свойствам и методам

По умолчанию доступ к свойствам и методам класса ничем не ограничен, но не всегда это является допустимым. Например, метод set_name из предыду­щей статьи не позволяет присвоить свойству name значение, превышающее по длине 10 символов.

code: #php
function set_name($text) {
  if  (strlen($text)<=10) {
    $this->name = $text;
  }
}

Но при этом остается возможность присвоения некорректного значения свой­ству name напрямую, например:

code: #php
$this->name = "слишком длинное имя";

Решение заключается в ограничении доступа к свойствам и методам класса при помощи модификаторов доступа. В РНР существуют три модификатора доступа:

public — нет ограничений на доступ.

private — доступ разрешен только изнутри класса.

protected — доступ разрешен только изнутри класса и всех его потомков.

По умолчанию все свойства и методы объявляются как public, что означает

отсутствие ограничений на доступ к ним снаружи класса. Но если свойство или метод объявлено как private, доступ к нему из кода за пределами класса будет заблокирован. Ниже приведен пример попытки доступа к приватному свойству name:

code: #php
<?php
 
class Animal {
  private $name;
 
  function set_name($text) {
    $this->name = $text;
  }
 
  function get_name() {
    return $this->name;
  }
}
 
$lion = new Animal;
$lion->set_name("Бонифаций");
echo "Имя нового льва: ",  $lion->name,  ".";
 
?>

При выполнении данного кода будет выведено следующее сообщение об ошибке:

Fatal error: Cannot access private property Animal::$name in
test.php on line 19

Наряду с приватными свойствами можно объявить и приватные методы класса. Например, метод get_name может быть объявлен как приватный:

code: #php
<?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 свойства и методы класса будут доступны только изнутри данного класса, а также из всех классов, порож­денных на основе данного.

Книга: PHP в примерах. Купить книгу
Автор: Стивен Хольцнер. Переводчик: С. Банников
Поделиться:

Похожие статьи: