Requirements
No external libraries are needed to build this extension.Installation
There is no installation needed to use these functions; they are part of the PHP core.Runtime Configuration
This extension has no configuration directives defined in php.ini.Resource Types
This extension has no resource types defined.Predefined Constants
This extension has no constants defined.Examples
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 363. classes.inc
<?php
// base class with member properties and methodsclass 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 classclass 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 364. test_script.php
<pre>
<?php
include "classes.inc";
// utility functions
function print_vars($obj)
{
foreach (get_object_vars($obj) as $prop => $val) {
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)
{
if (is_subclass_of($GLOBALS[$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 objectsecho "veggie: CLASS " . get_class($veggie) . "\n";
echo "leafy: CLASS " . get_class($leafy);
echo ", PARENT " . get_parent_class($leafy) . "\n";
// show veggie propertiesecho "\nveggie: Properties\n";print_vars($veggie);
// and leafy methodsecho "\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
No comments:
Post a Comment