7.11.1 Problem
You want to inspect an object to see what methods and
properties it has, which lets you write code that works on any generic object,
regardless of type.
7.11.2 Solution
// learn about cars
$car_methods = get_class_methods('car');
$car_vars = get_class_vars('car');
// act on our knowledge
if (in_array('speed_away', $car_methods)) {
$getaway_van = new car;
$getaway_van->speed_away( );
}
7.11.3 Discussion
It's rare to have an object and be unable to examine the actual
code to see how it's described. Still, these functions can be useful for
projects you want to apply to a whole range of different classes, such as
creating automated class documentation, generic object debuggers, and state
savers, like serialize( ).
Both get_class_methods( ) and get_class_vars(
) return an array of values. In get_class_methods( ), the keys are
numbers, and the values are the method names. For get_class_vars( ),
both variable names and default values (assigned using var) are
returned, with the variable name as the key and the default value, if any, as
the value.
Another useful function is get_object_vars( ) . Unlike its sister function
get_class_vars( ), get_object_vars( ) returns variable
information about a specific instance of an object, instead of a generic newly
created object.
As a result, you can use it to check the status of an object as
it currently exists in a program:
$clunker = new car; $clunker_vars = get_object_vars($clunker); // we pass the object, not the class
Since you want information about a specific object, you pass
the object and not its class name. But, get_object_vars( ) returns
information in the same format as get_class_vars( ).
This makes it easy to write quick scripts to see if you're
adding new class variables:
$new_vars = array_diff(array_keys(get_object_vars($clunker)),
array_keys(get_class_vars('car')));
You extract the variable names using array_keys( ) . Then, with the help of
array_diff( ), you find which variables are in the $clunker
object that aren't defined in the car class.
If you just need a quick view at an object instance, and don't
want to fiddle with get_class_vars( ), use either var_dump(
) ,
var_export( ), or print_r( ) to print the object's values.
Each of these three functions prints out information in a slightly different
way; var_export( ) can optionally return the information, instead of
displaying it.