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

По умолчанию доступ к свойствам и методам класса ничем не ограничен, но не всегда это является допустимым. Например, метод 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 свойства и методы класса будут доступны только изнутри данного класса, а также из всех классов, порожденных на основе данного.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: