It appears the filter parameter accepts a long value that is one of ReflectionProperty::IS_STATIC, ReflectionProperty::IS_PUBLIC, ReflectionProperty::IS_PROTECTED, or ReflectionProperty::IS_PRIVATE as a way to limit the returned properties. Flags may be combined by adding them together.

It should be noted that the 'filter' parameter in the getProperties(filter) method is expected to be of type long. Not sure why, but it doesn't function as a way of passing in a string to fetch a subset of properties by string match.

Looks like you can access public, protected, private variables by casting the object to an array (useful for Unit Testing). However casting to an array still won't allow you access to protected and private static variables.