Какие модификаторы видимости знаешь в PHP?

«Какие модификаторы видимости знаешь в PHP?» — вопрос из категории PHP Core, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В PHP существуют три основных модификатора видимости для свойств и методов класса:

  1. public — доступен отовсюду: извне класса, в классах-наследниках и внутри самого класса.
  2. protected — доступен только внутри класса, где объявлен, и в его классах-наследниках.
  3. private — доступен исключительно внутри класса, где объявлен.

Начиная с PHP 7.1, модификаторы видимости можно применять и к константам класса (по умолчанию — public).

Пример, демонстрирующий область видимости:

class Example {
    public $public = 'public';
    protected $protected = 'protected';
    private $private = 'private';

    public function show() {
        // Внутри класса доступны все свойства
        echo $this->public;    // OK
        echo $this->protected; // OK
        echo $this->private;   // OK
    }
}

class Child extends Example {
    public function showChild() {
        echo $this->public;    // OK — public
        echo $this->protected; // OK — protected доступен наследнику
        // echo $this->private; // Fatal Error — private недоступен
    }
}

$obj = new Example();
echo $obj->public;    // OK — доступ извне
// echo $obj->protected; // Fatal Error
// echo $obj->private;   // Fatal Error