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

Последнее обновление: 19.03.2021

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

  • public: к свойствам и методам, объявленным с данным модификатором, можно обращаться из внешнего кода и из любой части программы

  • protected: свойства и методы с данным модификатором доступны из текущего класса, а также из классов-наследников

  • 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;

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

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850