Сегодняшняя (очень короткая) сказка на ночь посвящена небольшой, но действительно важной характеристике ключевых слов для видимости PHP: частный и защищенный.

Вот оно:

Вы можете получить доступ к закрытым и защищенным методам и атрибутам других объектов! Да, вы правильно прочитали. И я не говорю о магии отражения. Процитируем документацию по PHP:

Объекты одного типа будут иметь доступ к частным и защищенным членам друг друга, даже если они не являются одними и теми же экземплярами.

Что это значит для нас, простых смертных?

Частный и защищенный видимость находится на уровне класса, а не на уровне экземпляра.

Итак, можно создавать такие методы:

Хорошо, а есть ли это в реальной жизни? Конечно!

Я нашел очень полезным то, что мы можем создать именованный статический конструктор, который устанавливает для нас частные атрибуты:

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

На сегодня все! Доброй ночи!

P.S. Кстати, начиная с PHP 7.4, есть еще одна уловка для доступа к закрытым и защищенным атрибутам помимо отражения - знаете ли вы, как это можно сделать? Дай мне знать в комментариях!