Полный цикл в digital

Модификаторы доступа

С помощью специальных модификаторов можно задать область видимости для свойств и методов класса. В PHP есть три таких модификатора:

  1. public к свойствам и методам, объявленным с данным модификатором, можно обращаться из внешнего кода и из любой части программы
  2. protected свойства и методы с данным модификатором доступны из текущего класса, а также из классов-наследников
  3. private свойства и методы с данным модификатором доступны только из текущего класса

Рассмотрим на примере. Например, у нас есть следующий класс:

class Person {
private $privateA ="private";
public $publicA = "public";
protected $protectedA = "protected";
private function getPrivateMethod() {
echo "private method <br/>";
}
protected function getProtectedMethod() {
echo "protected method <br/>";
}
public function getPublicMethod() {
echo "public method <br/>";
}
function test() {
$this->getPrivateMethod();
$this->getProtectedMethod();
$this->getPublicMethod();
echo "$this->privateA <br />";
echo "$this->protectedA <br />";
echo "$this->publicA <br />";
}
}

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

Теперь создадим класс, производный от класса Person:

class Employee extends Person {
function test() {
//echo $this->privateA; // нельзя, так как privateA - private в классе-родителе
echo $this->protectedA;
echo $this->publicA;
//$this->getPrivateMethod(); // нельзя, так как private в классе-родителе
$this->getProtectedMethod();
$this->getPublicMethod();
}
}

Классу-наследнику доступны все свойства и методы с модификаторами public и protected, но недоступны методы и свойства с модификатором private.

Теперь рассмотрим использование класса Person во внешнем коде:

$person = new Person;
// $person->getPrivateMethod();    // недоступно, так как private
// $person->getProtectedMethod();  // недоступно, так как protected
$person->getPublicMethod();
// echo $person->privateA;         // недоступно, так как private
// echo $person->protectedA;       // недоступно, так как protected
echo $person->publicA;

При использовании объектов данного класса нам доступны только публичные методы и свойства, а свойства и методы с модификаторами private и protected не доступны.

Доступ к методам и свойствам объекта

Стоит отметить, что в PHP в классе можно обращаться в переменным и методам с модификаторами private и protected объекта этого же класса:

class Account {
private $sum = 0;
function __construct($sum) {
$this->sum = $sum;
}
function getSumFrom($otherAccount, $money) {
$otherAccount -> sum -= $money;
$this -> sum += $money;
}
function prinSum() {
echo "На счете $this->sum у.е.<br>";
}
}
$acc1 = new Account(100);
$acc2 = new Account(400);
$acc1->getSumFrom($acc2, 200);
$acc1->prinSum(); // На счете 300 у.е.

Класс Account представляет условный класс банковского счета. В приватной переменной $sum хранится сумма на счете.

В методе getSumFrom() в качестве параметра получаем объект этого же класса Account и сумму перевода. И поскольку объект представляет тот же класс Account, то мы можем обратиться к его свойствам и методам с модификаторами private и protected:

$otherAccount -> sum -= $money;

И таким образом, выполнить условный денежный перевод с счета на счет.

Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг