- var_dump: documentation ( source)
- get_object_vars: documentation ( source)
<?php
/**
* @psalm-param class-string|object $classOrObject
*/
function isInternalClass($classOrObject): bool
{
return (new ReflectionClass($classOrObject))->isInternal();
}
/**
* @return array<string, mixed>
*/
function objectToArray(object $object): array
{
return isInternalClass($object)
? get_object_vars($object)
: (fn (): array => get_object_vars($this))->call($object);
}
final class A
{
private $a = 'incapsulated string';
}
// user-defined class instance
var_dump(objectToArray(new A()));
// internal stdClass instance
$object = new stdClass();
$object->a = 1;
var_dump(objectToArray($object));
// internal DateTimeImmutable class instance
var_dump(objectToArray(new DateTimeImmutable()));