PHP dokáže relativně snadno, pomocí reflection, zpřístupnit původně nepřístupné (private, protected) metody a property třídy. Mějmě následující třídu:
class mujClass {
protected $data = '';
private function badabum($input) {
echo $input . $this->data . '';
}
}
Nejprve zpřístupním a zavolám metodu badabum. Využiji k tomu objekt ReflectionMethod
$mujClassInstance = new \mujClass(); // muj class ma private metodu badabum
$method = new \ReflectionMethod(get_class($mujClassInstance), 'badabum');
$method->setAccessible(true); // zpristupnim si metodu
$method->invokeArgs($mujClassInstance, array('aaa')); // volani privatni metody
V případě protected property $data je postup obdobný.
$property = new \ReflectionProperty(get_class($mujClassInstance), 'data');
$property->setAccessible(true); // zpristupnim si propertu
$property->setValue($mujClassInstance, ' protected data');
$method->invokeArgs($mujClassInstance, array('bbb')); // zase zavolam badabum
echo $property->getValue($mujClassInstance);
Zpřístupnění původně nepřístupných vlastností třídy se může hodit například při testování kódu pomocí PHPUnit testů.
Tweet