How to programmatically find public properties of a class from inside one of it's methods

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.


Does not work with php version >=7
As such, I can't really recommend solution any longer.
Use reflection instead

To get the public properties from within the class

$publicProperties = call_user_func('get_object_vars', $this);

the "trick" is that get_object_vars is being called from the scope of call_user_func and not the scope of the object

no need for reflection, stand-alone functions, closures, etc