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_array
Call a user method given with an array of parameters
Description
mixed
call_user_method_array
string
method_name
object
obj
array
paramarr
Calls a the method referred by method_name from
the user defined obj object, using the paramaters
in paramarr.
See also:
call_user_func_array,
call_user_func,
call_user_method.
This function was added to the CVS code after release of PHP 4.0.4pl1
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_array,
call_user_func,
call_user_method_array.
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.
get_class returns the class name in
lowercase form.
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.
As of PHP 4.0.6, you can specify the object itself instead of
class_name. For example:
$class_methods = get_class_methods($my_class);
get_class_methods example
<?php
class myclass {
// constructor
function myclass() {
return(true);
}
// method 1
function myfunc1() {
return(true);
}
// method 2
function myfunc2() {
return(true);
}
}
$my_class = new myclass();
$class_methods = get_class_methods(get_class($my_class));
foreach ($class_methods as $method_name) {
echo "$method_name\n";
}
?>
Will produce:
myclass
myfunc1
myfunc2
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 associative array of default
properties of the class. The resulting array elements are in the
form of varname => value.
Uninitialized class variables will not be reported by
get_class_vars.
get_class_vars example
<?php
class myclass {
var $var1; // this has no default value...
var $var2 = "xyz";
var $var3 = 100;
// constructor
function myclass() {
return(true);
}
}
$my_class = new myclass();
$class_vars = get_class_vars(get_class($my_class));
foreach ($class_vars as $name => $value) {
echo "$name : $value\n";
}
?>
Will produce:
var2 : xyz
var3 : 100
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
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).
Also note that depending on what libraries you have compiled
into PHP, additional classes could be present.
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 get_object_vars
<?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.