- substr: documentation ( source)
- var_dump: documentation ( source)
- strpos: documentation ( source)
- lcfirst: documentation ( source)
<?php
interface ArraySerializableInterface {}
class Baz {
private $BazEvent = 'BazEvent';
}
class Bar{
private $event = 'BarEvent';
private $secendClass;
/**
* Constructor.
*/
public function __construct()
{
$this->secendClass = [
new Baz(),
];
}
}
class Foo {
/**
* @var string
*/
private $providerId;
/**
* @var array
*/
private $events;
/**
* Constructor.
*/
public function __construct($providerId)
{
$this->providerId = $providerId;
$this->events = [];
}
/**
* @return string
*/
public function getProviderId()
{
return $this->providerId;
}
/**
* @return array
*/
public function getEvents()
{
return $this->events;
}
}
function entity2array($entity, $recursionDepth = 2) {
$result = array();
$class = new \ReflectionClass(get_class($entity));
foreach ($class->getMethods(\ReflectionMethod::IS_PUBLIC) as $method) {
$methodName = $method->name;
if (strpos($methodName, "get") === 0 && strlen($methodName) > 3) {
$propertyName = lcfirst(substr($methodName, 3));
$value = $method->invoke($entity);
if (is_object($value)) {
if ($recursionDepth > 0) {
$result[$propertyName] = $this->entity2array($value, $recursionDepth - 1);
} else {
$result[$propertyName] = "***"; //stop recursion
}
} else {
$result[$propertyName] = $value;
}
}
}
return $result;
}
$foo = new Foo;
var_dump( entity2array($foo));