Инкапсуляция и спецификаторы доступа в PHP
Вход Регистрация

Инкапсуляция и спецификаторы доступа в PHP

Класс может использоваться без методов и членов, однако пользы в этом случае от него не больше, чем от переменной, которая не может хранить значения.

Как правило, классы содержат члены и методы. Часть из них будет использоваться внешним разработчиком, часть предназначена только для внутреннего использования в рамках самого класса. PHP пердоставляет специальные ключевые слова, позволяющие указать, какие члены и методы доступны извне, а какие нет.

Это позволяет реализовать принцип инкапсуляции.

У нас имеется класс "Ф.И.О" (fio), который содержит четыре члена:


$lastname - фамилия;
$name - имя;
$middlename - отчество;
$age - возраст;

Напомним, что переменные объявленные в классе, называются членами, а функции методами.


class fio {

	public $lastname;

	public $name;

	public $middlename;

	private $age;

}

// Устанавливаем значения членам класса.

$_new = new fio();

$_new->lastname = 'Иванов';

$_new->name = 'Иван';

$_new->middlename = 'Иванович';

$_new->age = 50;


// Выводим члены класса.

echo $_new->lastname .' - '. $_new->name .' - '. $_new->middlename;

echo $_new->age; # Обращение завершится ошибкой.

Как видно члены класса "fio" объявляются ключевым словом "public", которое является спецификатором доступа. Все члены и методы класса делятся на закрытые и открытые. Для открытых членов класса существует спецификатором доступа "public", сам член класса или метод будет доступен как внутри класса так и извне, а для того чтобы член или метод класса небыл доступен извне программы объявляется спецификатор "private". Существует ещё один спецификатор доступа "protected" (защищённый). Иногда удобно, чтобы член или метод базового класса, оставался закрытым для внешнего кода и был открыт для производного класса в этом случае прибегают именно к нему. Ниже продемонстрирован пример его использования.


class fio {

	protected $_var;

	public function __construct($_var)
	{
		$this->var = $_var;
	}

}


class age extends fio {

	public function __construct($_var)
	{
		$this->var = $_var;
	}

}

$_new = new age(30);

echo $_new->_var; // Последует ошибка так как обращение к члену возможно только внутри самого класса.

Принцип инкапсуляции - это возможность скрыть реализацию объекта с использованием спецификаторов доступа. При этом мы избавляем и без того загружанное сознание разработчика от лишних деталей.

Слова "public, protected, private", которые называются <Спецификаторами доступа> были введены в PHP 5, в более ранних версиях использовалось ключевое слово "var".


Комментировать

captcha

  #1 / Гость
06 июня 2014 / Ответить  

Вне класса нельзя присваивать приватным свойствам значения.


$_new->age = 50;
  #2 / codomaza
11 июня 2014 / Ответить  

Все верно, об этом в статье и написано :)

Вход

Зарегистрируйтесь, если нет учетной записи

Напомнить пароль
Регистрация
Напомнить пароль
Войти в личный кабинет