From 06799b318b47edee4a64a3ead6000c50a696c618 Mon Sep 17 00:00:00 2001 From: "Jesus M. Castagnetto" Date: Mon, 10 Jul 2000 04:29:52 +0000 Subject: [PATCH] Added definitions for get_class, get_parent_class, class_exists, is_subclass_of, get_declared_classes. Added also an example on how to use the functions in this section. git-svn-id: https://svn.php.net/repository/phpdoc/en/trunk@27975 c90b9560-bf6c-de11-be94-00142212c4b1 --- functions/classobj.xml | 286 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 284 insertions(+), 2 deletions(-) diff --git a/functions/classobj.xml b/functions/classobj.xml index 4ac3815f65..7e53cf7c21 100644 --- a/functions/classobj.xml +++ b/functions/classobj.xml @@ -2,6 +2,213 @@ 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 this 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 + + + + + + + + + + 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 + + + + + + + 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 + + + + get_class_methods @@ -47,7 +254,7 @@ get_object_vars - Returns an array of object properties + Returns an associative array of object properties Description @@ -58,12 +265,58 @@ - This function returns an array of object properties for the + This function returns an associative array of object properties for the specified object obj. + + + 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. + + + + + + + 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. + + + + method_exists @@ -86,6 +339,35 @@ + + + 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). + + + + +