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

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

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

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

1
2
3
4
5
6
7
8
9
<?php 

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

?>

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

1
2
3
4
5
<?php 

  $this
->name "слишком длинное имя";

?>

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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 может быть объявлен как приватный:

Теги:
php