- var_dump: documentation ( source)
- get_object_vars: documentation ( source)
<?php
class Foo
{
public function getBaz($obj)
{
var_dump($obj->baz);
}
public function getVars($obj)
{
var_dump(get_object_vars($obj));
}
}
$obj = (object) array(
"\0*\0bar" => 1,
"\0Foo\0baz" => 2,
);
// trying `get_object_vars` from global scope
var_dump(get_object_vars($obj));
// trying from Foo instance
(new Foo())->getVars($obj);
// trying from a Foo instance
(new Foo())->getBaz($obj);
// trying from a closure bound to `stdClass`
var_dump(Closure::bind(function ($obj) { var_dump($obj->bar, $obj->baz); }, $obj, 'stdClass')->__invoke($obj));
// trying from a closure bound to `Foo`
var_dump(Closure::bind(function ($obj) { var_dump($obj->bar, $obj->baz); }, $obj, 'Foo')->__invoke($obj));
// direct access (causes fatal)
var_dump($obj->{"\0*\0bar"});
var_dump($obj->{"\0Foo*\0baz"});