I am trying to get the the string "this info" inside this object lets call it $object
, but data is protected, how can I access that pocket?
object(something)#29 (1) {
["_data":protected]=>
array(10) {
["Id"]=>
array(1) {
[0]=>
string(8) "this info"
}
["SyncToken"]=>
array(1) {
[0]=>
string(1) "0"
}
["MetaData"]=>
array(1) {
Obviously $object->_data
gives me an errorCannot access protected property
There are a few alternative ways to get a private/protected properties of an object that doesn't require you to modify the original source code.
Option 1 - Reflection:
Wikipedia defines Reflection as
... the ability of a computer program to examine and modify the structure and behavior (specifically the values, meta-data, properties and functions) of the program at runtime. [Reflection (computer_programming)]
In this case you may want to use reflection to examine the properties of the object and set as accessible the protected property _data
I do not recommend reflection unless you have very specific use cases where it may be required. This is an example on how to get your private/protected parameter using Reflection with PHP:
$reflector = new \ReflectionClass($object);
$classProperty = $reflector->getProperty('_data');
$classProperty->setAccessible(true);
$data = $classProperty->getValue($object);
Option 2 - Subclasses (protected properties only):
If the class is not final, you can create a subclass of the original. This will give you access to the protected properties. In the subclass you could write your own getter methods:
class BaseClass
{
protected $_data;
// ...
}
class Subclass extends BaseClass
{
public function getData()
{
return $this->_data
}
}
Hope this helps.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With