Class/Object Functions Classes/Objects Introduction About 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). An example of use 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. 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. 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: [...] Parentage: Object leafy does not belong to a subclass of Spinach Object leafy belongs to class spinach a subclass of Vegetable call_user_method Call a user method on an specific object Description mixed call_user_method string method_name object obj mixed parameter mixed ... Calls a the method referred by method_name from the user defined obj object. An example of usage is below, where we define a class, instantiate an object and use call_user_method to call indirectly its print_info method. <?php class Country { var $NAME; var $TLD; function Country($name, $tld) { $this->NAME = $name; $this->TLD = $tld; } function print_info($prestr="") { echo $prestr."Country: ".$this->NAME."\n"; echo $prestr."Top Level Domain: ".$this->TLD."\n"; } } $cntry = new Country("Peru","pe"); echo "* Calling the object method directly\n"; $cntry->print_info(); echo "\n* Calling the same method indirectly\n"; call_user_method ("print_info", $cntry, "\t"); ?> See also call_user_func. class_exists Checks if the class has been defined Description bool class_exists string class_name This function returns true if the class given by class_name has been defined, false otherwise. get_class Returns the name of the class of an object Description string get_class object obj This function returns the name of the class of which the object obj is an instance. See also get_parent_class, is_subclass_of get_class_methods Returns an array of class methods' names Description array get_class_methods string class_name This function returns an array of method names defined for the class specified by class_name. See also get_class_vars, get_object_vars get_class_vars Returns an array of default properties of the class Description array get_class_vars string class_name This function will return an array of default properties of the class. See also get_class_methods, get_object_vars get_declared_classes Returns an array with the name of the defined classes Description array get_declared_classes void This function returns an array of the names of the declared classes in the current script. In PHP 4.0.1pl2, three extra classes are returned at the beginning of the array: stdClass (defined in Zend/zend.c), OverloadedTestClass (defined in ext/standard/basic_functions.c) and Directory (defined in ext/standard/dir.c). get_object_vars Returns an associative array of object properties Description array get_object_vars object obj This function returns an associative array of defined object properties for the specified object obj. If variables declared in the class of which the obj is an instance, have not been assigned a value, those will not be returned in the array. Use of <function>get_object_vars</function> <?php class Point2D { var $x, $y; var $label; function Point2D($x, $y) { $this->x = $x; $this->y = $y; } function setLabel($label) { $this->label = $label; } function getPoint() { return array("x" => $this->x, "y" => $this->y, "label" => $this->label); } } $p1 = new Point2D(1.233, 3.445); print_r(get_object_vars($p1)); // "$label" is declared but not defined // Array // ( // [x] => 1.233 // [y] => 3.445 // ) $p1->setLabel("point #1"); print_r(get_object_vars($p1)); // Array // ( // [x] => 1.233 // [y] => 3.445 // [label] => point #1 // ) ?> See also get_class_methods, get_class_vars get_parent_class Returns the name of the parent class of an object Description string get_parent_class object obj This function returns the name of the parent class to the class of which the object obj is an instance. See also get_class, is_subclass_of is_subclass_of Determines if an object belongs to a subclass of the specified class Description bool is_subclass_of object obj string superclass This function returns true if the object obj, belongs to a class which is a subclass of superclass, false otherwise. See also get_class, get_parent_class method_exists Checks if the class method exists Description bool method_exists object object string method_name This function returns true if the method given by method_name has been defined for the given object, false otherwise.