Есть несколько альтернативных способов получить закрытые / защищенные свойства объекта, которые не требуют изменения исходного кода.
Вариант 1 - Отражение :
Википедия определяет отражение как
... способность компьютерной программы проверять и изменять структуру и поведение (в частности, значения, метаданные, свойства и функции) программы во время выполнения. [Reflection (computer_programming)]
В этом случае вы можете использовать отражение для проверки свойств объекта и установить в качестве доступное защищенное свойство _data
Я не рекомендую рефлексию, если у вас нет особых случаев использования, где это может потребоваться. Это пример того, как получить ваш закрытый / защищенный параметр, используя Reflection с PHP:
$reflector = new \ReflectionClass($object);
$classProperty = $reflector->getProperty('_data');
$classProperty->setAccessible(true);
$data = $classProperty->getValue($object);
Вариант 2 - Подклассы (только защищенные свойства):
Если класс не final , вы можете создать подкласс оригинала. Это даст вам доступ к защищенным свойствам. В подклассе вы можете написать свои собственные методы получения:
class BaseClass
{
protected $_data;
// ...
}
class Subclass extends BaseClass
{
public function getData()
{
return $this->_data
}
}
Надеюсь, это поможет.