These functions allow you to obtain information about classes
      and instance objects. You can obtain the name of the class to
      which a object belongs, as well as its member properties and 
      methods. Using these functions, you can find out not only the
      class membership of an object, but also its parentage (i.e.
      what class is the object class extending).
     
      In this example, we first define a base class and an extension
      of the class. The base class describes a general vegetable,
      whether it is edible or not and what is its color. The subclass
      Spinach adds a method to cook it and another to
      find out if it is cooked.
     
      
| Example 1. classes.inc | <?php
// base class with member properties and methods
class Vegetable {
    var $edible;
    var $color;
    function Vegetable( $edible, $color="green" ) {
        $this->edible = $edible;
        $this->color = $color;
    }
    function is_edible() {
        return $this->edible;
    }
    function what_color() {
        return $this->color;
    }
    
} // end of class Vegetable
// extends the base class
class Spinach extends Vegetable {
    var $cooked = false;
    function Spinach() {
        $this->Vegetable( true, "green" );
    }
    function cook_it() {
        $this->cooked = true;
    }
    function is_cooked() {
        return $this->cooked;
    }
    
} // end of class Spinach
?> | 
 | 
     
     We then instantiate 2 objects from these classes and print out
     information about them, including their class parentage.
     We also define some utility functions, mainly to have a nice printout
     of the variables.
     
      
| Example 2. test_script.php | <pre>
<?php
include "classes.inc";
// utility functions
function print_vars($obj) {
    $arr = get_object_vars($obj);
    while (list($prop, $val) = each($arr))
        echo "\t$prop = $val\n";
}
function print_methods($obj) {
    $arr = get_class_methods(get_class($obj));
    foreach ($arr as $method)
        echo "\tfunction $method()\n";
}
function class_parentage($obj, $class) {
    global $$obj;
    if (is_subclass_of($$obj, $class)) {
        echo "Object $obj belongs to class ".get_class($$obj);
        echo " a subclass of $class\n";
    } else {
        echo "Object $obj does not belong to a subclass of $class\n";
    }
}
// instantiate 2 objects
$veggie = new Vegetable(true,"blue");
$leafy = new Spinach();
// print out information about objects
echo "veggie: CLASS ".get_class($veggie)."\n";
echo "leafy: CLASS ".get_class($leafy);
echo ", PARENT ".get_parent_class($leafy)."\n";
// show veggie properties
echo "\nveggie: Properties\n";
print_vars($veggie);
// and leafy methods
echo "\nleafy: Methods\n";
print_methods($leafy);
echo "\nParentage:\n";
class_parentage("leafy", "Spinach");
class_parentage("leafy", "Vegetable");
?>
</pre> | 
 | 
     
      One important thing to note in the example above is that
      the object $leafy is an instance of the class
      Spinach which is a subclass of 
      Vegetable,
      therefore the last part of the script above will output: