SobesLab логотип SobesLab

Ответ

Прямого доступа к private-свойству объекта извне класса нет (в этом и суть private — оно скрыто). Но обойти можно: через ReflectionProperty. Пример: $rp = new ReflectionProperty(ClassName::class, "propertyName"); $rp->setAccessible(true); $value = $rp->getValue($obj); — таким образом можно прочитать (или даже изменить) закрытое свойство $obj. Это используемая методика, например, в особо сложных случаях тестирования или при сериализации. Также, если класс определил магический метод __get(), то попытка обратиться $obj->propertyName вызовет этот __get(), где программист может решить, выдавать ли приватное значение. Однако без таких обходных механизмов private-свойство недоступно извне по правилам ООП. Нужно либо предоставить метод доступа (геттер) внутри класса, либо использовать рефлексию, которая снимает ограничение видимости.