I’ve got a class Foo
with public and protected properties. Foo
needs to have a non-static method, getPublicVars()
that returns a list of all the public properties of Foo
(this is just an example, I know from outside the Foo
object calling get_object_vars()
will accomplish this and there is no need for my getPublicVars()
method).
Note: This must also return dynamically declared properties assigned at runtime to the class instance (object) that aren’t defined in the class’s definition.
Here’s the example:
class Foo{
private $bar = '123';
protect $boo = '456';
public $beer = 'yum';
//will return an array or comma seperated list
public function getPublicVars(){
// thar' be magic here...
}
}
$foo = new Foo();
$foo->tricky = 'dynamically added var';
$result = $foo->getPublicVars();
var_dump($result); // array or comma list with 'tricky' and 'beer'
What is the most concise way to get the only the public properties of an object from inside a class’s own methods where both public and protected are visible?
I’ve looked at:
But this doesn’t seem to address my question as it points to using get_object_vars()
from outside the object.
Advertisement
Answer
As you already realized, PHP’s build in get_object_vars
is scope-sensitive. You want the public object properties only.
So from that function to the public variant is not a large step:
function get_object_public_vars($object) {
return get_object_vars($object);
}
Calling this get_object_public_vars
will give you only the public properties then because it is place out of scope of the current object.
If you need more fine-grained control, you can also make use of the ReflectionObject
:
(new ReflectionObject($this))->getProperties(ReflectionProperty::IS_PUBLIC);
Which has the benefit that you don’t need to introduce another function in the global namespace.