mirror of
https://github.com/sigmasternchen/php-doc-en
synced 2025-03-16 08:58:56 +00:00
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
This commit is contained in:
parent
e08f59fea4
commit
06799b318b
1 changed files with 284 additions and 2 deletions
|
@ -2,6 +2,213 @@
|
|||
<title>Class/Object Functions</title>
|
||||
<titleabbrev>Classes/Objects</titleabbrev>
|
||||
|
||||
<partintro>
|
||||
<sect1 id="classobj.partintro">
|
||||
<title>Introduction</title>
|
||||
<sect2 id="classobj.intro">
|
||||
<title>About</title>
|
||||
<para>
|
||||
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).
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2>
|
||||
<title>An example of use</title>
|
||||
<para>
|
||||
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
|
||||
<varname>Spinach</varname> adds a method to cook it and another to
|
||||
find out if it is cooked.
|
||||
</para>
|
||||
<para>
|
||||
<example>
|
||||
<title>classes.inc</title>
|
||||
<programlisting role="php">
|
||||
<?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
|
||||
|
||||
?>
|
||||
</programlisting>
|
||||
</example>
|
||||
</para>
|
||||
<para>
|
||||
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.
|
||||
</para>
|
||||
<para>
|
||||
<example>
|
||||
<title>test_script.php</title>
|
||||
<programlisting role="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>
|
||||
</programlisting>
|
||||
</example>
|
||||
</para>
|
||||
<para>
|
||||
One important thing to note in the example above is that
|
||||
the object <varname>$leafy</varname> is an instance of the class
|
||||
<varname>Spinach</varname> which is a subclass of
|
||||
<varname>Vegetable</varname>,
|
||||
therefore the last part of the script above will output:
|
||||
</para>
|
||||
<para>
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
[...]
|
||||
Parentage:
|
||||
Object leafy does not belong to a subclass of Spinach
|
||||
Object leafy belongs to class spinach a subclass of Vegetable
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
</partintro>
|
||||
|
||||
<refentry id="function.get-class">
|
||||
<refnamediv>
|
||||
<refname>get_class</refname>
|
||||
<refpurpose>Returns the name of the class of an object</refpurpose>
|
||||
</refnamediv>
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>string <function>get_class</function></funcdef>
|
||||
<paramdef>object <parameter>obj</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
<para>
|
||||
This function returns the name of the class of which the
|
||||
object <parameter>obj</parameter> is an instance.
|
||||
</para>
|
||||
<simpara>
|
||||
See also <function>get_parent_class</function>
|
||||
</simpara>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<refentry id="function.get-parent-class">
|
||||
<refnamediv>
|
||||
<refname>get_parent_class</refname>
|
||||
<refpurpose>Returns the name of the parent class of an object</refpurpose>
|
||||
</refnamediv>
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>string <function>get_parent_class</function></funcdef>
|
||||
<paramdef>object <parameter>obj</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
<para>
|
||||
This function returns the name of the parent class to
|
||||
the class of which the object <parameter>obj</parameter>
|
||||
is an instance.
|
||||
</para>
|
||||
<simpara>
|
||||
See also <function>get_class</function>
|
||||
</simpara>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<refentry id="function.get-class-methods">
|
||||
<refnamediv>
|
||||
<refname>get_class_methods</refname>
|
||||
|
@ -47,7 +254,7 @@
|
|||
<refentry id="function.get-object-vars">
|
||||
<refnamediv>
|
||||
<refname>get_object_vars</refname>
|
||||
<refpurpose>Returns an array of object properties</refpurpose>
|
||||
<refpurpose>Returns an associative array of object properties</refpurpose>
|
||||
</refnamediv>
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
@ -58,12 +265,58 @@
|
|||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
<para>
|
||||
This function returns an array of object properties for the
|
||||
This function returns an associative array of object properties for the
|
||||
specified object <parameter>obj</parameter>.
|
||||
</para>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<refentry id="function.is-subclass-of">
|
||||
<refnamediv>
|
||||
<refname>is_subclass_of</refname>
|
||||
<refpurpose>
|
||||
Determines if an object belongs to a subclass
|
||||
of the specified class
|
||||
</refpurpose>
|
||||
</refnamediv>
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>bool <function>is_subclass_of</function></funcdef>
|
||||
<paramdef>object <parameter>obj</parameter></paramdef>
|
||||
<paramdef>string <parameter>superclass</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
<para>
|
||||
This function returns true if the object <parameter>obj</parameter>,
|
||||
belongs to a class which is a subclass of
|
||||
<parameter>superclass</parameter>, false otherwise.
|
||||
</para>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<refentry id="function.class-exists">
|
||||
<refnamediv>
|
||||
<refname>class_exists</refname>
|
||||
<refpurpose>Checks if the class has been defined</refpurpose>
|
||||
</refnamediv>
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>bool <function>class_exists</function></funcdef>
|
||||
<paramdef>string <parameter>class_name</parameter></paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
<para>
|
||||
This function returns true if the class given by
|
||||
<parameter>class_name</parameter> has been defined,
|
||||
false otherwise.
|
||||
</para>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<refentry id="function.method-exists">
|
||||
<refnamediv>
|
||||
<refname>method_exists</refname>
|
||||
|
@ -86,6 +339,35 @@
|
|||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
<refentry id="function.get-declared-classes">
|
||||
<refnamediv>
|
||||
<refname>get_declared_classes</refname>
|
||||
<refpurpose>Returns an array with the name of the defined classes</refpurpose>
|
||||
</refnamediv>
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
<funcsynopsis>
|
||||
<funcprototype>
|
||||
<funcdef>array <function>get_declared_classes</function></funcdef>
|
||||
<paramdef>void</paramdef>
|
||||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
<para>
|
||||
This function returns an array of the names of the declared classes
|
||||
in the current script.
|
||||
</para>
|
||||
<note>
|
||||
<para>
|
||||
In PHP 4.0.1pl2, three extra classes are returned at the beginning of
|
||||
the array: <varname>stdClass</varname> (defined in Zend/zend.c),
|
||||
<varname>OverloadedTestClass</varname> (defined in
|
||||
ext/standard/basic_functions.c) and <varname>Directory</varname>
|
||||
(defined in ext/standard/dir.c).
|
||||
</para>
|
||||
</note>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
</reference>
|
||||
|
||||
<!-- Keep this comment at the end of the file
|
||||
|
|
Loading…
Reference in a new issue