mirror of
https://github.com/sigmasternchen/php-doc-en
synced 2025-03-16 08:58:56 +00:00
Added explanation and example to clarify that get_object_vars returns
all defined vars, so declared by unassigned ones will not be returned. Mentioned by cleong@organic.com in note 6126 (removed) git-svn-id: https://svn.php.net/repository/phpdoc/en/trunk@31930 c90b9560-bf6c-de11-be94-00142212c4b1
This commit is contained in:
parent
47c6fa3937
commit
b268d04eb3
1 changed files with 206 additions and 158 deletions
|
@ -6,86 +6,86 @@
|
|||
<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 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).
|
||||
</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">
|
||||
<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 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).
|
||||
</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;
|
||||
var $edible;
|
||||
var $color;
|
||||
|
||||
function Vegetable( $edible, $color="green" ) {
|
||||
$this->edible = $edible;
|
||||
$this->color = $color;
|
||||
}
|
||||
function Vegetable( $edible, $color="green" ) {
|
||||
$this->edible = $edible;
|
||||
$this->color = $color;
|
||||
}
|
||||
|
||||
function is_edible() {
|
||||
return $this->edible;
|
||||
}
|
||||
function is_edible() {
|
||||
return $this->edible;
|
||||
}
|
||||
|
||||
function what_color() {
|
||||
return $this->color;
|
||||
}
|
||||
|
||||
function what_color() {
|
||||
return $this->color;
|
||||
}
|
||||
|
||||
} // end of class Vegetable
|
||||
|
||||
|
||||
// extends the base class
|
||||
class Spinach extends Vegetable {
|
||||
|
||||
var $cooked = false;
|
||||
var $cooked = false;
|
||||
|
||||
function Spinach() {
|
||||
$this->Vegetable( true, "green" );
|
||||
}
|
||||
function Spinach() {
|
||||
$this->Vegetable( true, "green" );
|
||||
}
|
||||
|
||||
function cook_it() {
|
||||
$this->cooked = true;
|
||||
}
|
||||
function cook_it() {
|
||||
$this->cooked = true;
|
||||
}
|
||||
|
||||
function is_cooked() {
|
||||
return $this->cooked;
|
||||
}
|
||||
|
||||
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">
|
||||
</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
|
||||
|
||||
|
@ -94,25 +94,25 @@ 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";
|
||||
$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";
|
||||
$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";
|
||||
}
|
||||
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
|
||||
|
@ -138,27 +138,27 @@ 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
|
||||
<classname>Spinach</classname> which is a subclass of
|
||||
<classname>Vegetable</classname>,
|
||||
therefore the last part of the script above will output:
|
||||
</para>
|
||||
<para>
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
[...]
|
||||
</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
|
||||
<classname>Spinach</classname> which is a subclass of
|
||||
<classname>Vegetable</classname>,
|
||||
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>
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
</partintro>
|
||||
|
||||
|
@ -176,13 +176,13 @@ Object leafy belongs to class spinach a subclass of Vegetable
|
|||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
<para>
|
||||
This function returns the name of the class of which the
|
||||
object <parameter>obj</parameter> is an instance.
|
||||
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>,
|
||||
<function>is_subclass_of</function>
|
||||
</simpara>
|
||||
<simpara>
|
||||
See also <function>get_parent_class</function>,
|
||||
<function>is_subclass_of</function>
|
||||
</simpara>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
|
@ -200,14 +200,14 @@ Object leafy belongs to class spinach a subclass of Vegetable
|
|||
</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.
|
||||
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>,
|
||||
<function>is_subclass_of</function>
|
||||
</simpara>
|
||||
<simpara>
|
||||
See also <function>get_class</function>,
|
||||
<function>is_subclass_of</function>
|
||||
</simpara>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
|
@ -228,10 +228,10 @@ Object leafy belongs to class spinach a subclass of Vegetable
|
|||
This function returns an array of method names defined for the
|
||||
class specified by <parameter>class_name</parameter>.
|
||||
</para>
|
||||
<simpara>
|
||||
See also <function>get_class_vars</function>,
|
||||
<function>get_object_vars</function>
|
||||
</simpara>
|
||||
<simpara>
|
||||
See also <function>get_class_vars</function>,
|
||||
<function>get_object_vars</function>
|
||||
</simpara>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
|
@ -254,10 +254,10 @@ Object leafy belongs to class spinach a subclass of Vegetable
|
|||
This function will return an array of default properties of the
|
||||
class.
|
||||
</para>
|
||||
<simpara>
|
||||
See also <function>get_class_methods</function>,
|
||||
<function>get_object_vars</function>
|
||||
</simpara>
|
||||
<simpara>
|
||||
See also <function>get_class_methods</function>,
|
||||
<function>get_object_vars</function>
|
||||
</simpara>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
|
@ -275,13 +275,61 @@ Object leafy belongs to class spinach a subclass of Vegetable
|
|||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
<para>
|
||||
This function returns an associative array of object properties for the
|
||||
specified object <parameter>obj</parameter>.
|
||||
This function returns an associative array of defined object properties
|
||||
for the specified object <parameter>obj</parameter>. If variables
|
||||
declared in the class of which the <parameter>obj</parameter> is an
|
||||
instance, have not been assigned a value, those will not be returned
|
||||
in the array.
|
||||
<example>
|
||||
<title>Use of <function>get_object_vars</function></title>
|
||||
<programlisting role="php">
|
||||
<?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
|
||||
// )
|
||||
|
||||
?>
|
||||
</programlisting>
|
||||
</example>
|
||||
</para>
|
||||
<simpara>
|
||||
See also <function>get_class_methods</function>,
|
||||
<function>get_class_vars</function>
|
||||
</simpara>
|
||||
<simpara>
|
||||
See also <function>get_class_methods</function>,
|
||||
<function>get_class_vars</function>
|
||||
</simpara>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
|
@ -289,9 +337,9 @@ Object leafy belongs to class spinach a subclass of Vegetable
|
|||
<refnamediv>
|
||||
<refname>is_subclass_of</refname>
|
||||
<refpurpose>
|
||||
Determines if an object belongs to a subclass
|
||||
of the specified class
|
||||
</refpurpose>
|
||||
Determines if an object belongs to a subclass
|
||||
of the specified class
|
||||
</refpurpose>
|
||||
</refnamediv>
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
@ -304,13 +352,13 @@ Object leafy belongs to class spinach a subclass of Vegetable
|
|||
</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.
|
||||
belongs to a class which is a subclass of
|
||||
<parameter>superclass</parameter>, false otherwise.
|
||||
</para>
|
||||
<simpara>
|
||||
See also <function>get_class</function>,
|
||||
<function>get_parent_class</function>
|
||||
</simpara>
|
||||
<simpara>
|
||||
See also <function>get_class</function>,
|
||||
<function>get_parent_class</function>
|
||||
</simpara>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
|
@ -372,19 +420,19 @@ Object leafy belongs to class spinach a subclass of Vegetable
|
|||
</funcsynopsis>
|
||||
<para>
|
||||
This function returns an array of the names of the declared classes
|
||||
in the current script.
|
||||
in the current script.
|
||||
</para>
|
||||
<note>
|
||||
<para>
|
||||
In PHP 4.0.1pl2, three extra classes are returned at the beginning of
|
||||
the array: <classname>stdClass</classname> (defined in
|
||||
<filename>Zend/zend.c</filename>),
|
||||
<classname>OverloadedTestClass</classname> (defined in
|
||||
<filename>ext/standard/basic_functions.c</filename>)
|
||||
and <classname>Directory</classname>
|
||||
(defined in <filename>ext/standard/dir.c</filename>).
|
||||
</para>
|
||||
</note>
|
||||
<note>
|
||||
<para>
|
||||
In PHP 4.0.1pl2, three extra classes are returned at the beginning of
|
||||
the array: <classname>stdClass</classname> (defined in
|
||||
<filename>Zend/zend.c</filename>),
|
||||
<classname>OverloadedTestClass</classname> (defined in
|
||||
<filename>ext/standard/basic_functions.c</filename>)
|
||||
and <classname>Directory</classname>
|
||||
(defined in <filename>ext/standard/dir.c</filename>).
|
||||
</para>
|
||||
</note>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
|
@ -417,27 +465,27 @@ Object leafy belongs to class spinach a subclass of Vegetable
|
|||
</funcprototype>
|
||||
</funcsynopsis>
|
||||
<para>
|
||||
Calls a the method referred by <parameter>method_name</parameter> from
|
||||
the user defined <parameter>obj</parameter> object. An example of usage
|
||||
is below, where we define a class, instantiate an object and use
|
||||
<function>call_user_method</function> to call indirectly its
|
||||
<varname>print_info</varname> method.
|
||||
Calls a the method referred by <parameter>method_name</parameter> from
|
||||
the user defined <parameter>obj</parameter> object. An example of usage
|
||||
is below, where we define a class, instantiate an object and use
|
||||
<function>call_user_method</function> to call indirectly its
|
||||
<varname>print_info</varname> method.
|
||||
<informalexample>
|
||||
<programlisting role="php">
|
||||
<?php
|
||||
class Country {
|
||||
var $NAME;
|
||||
var $TLD;
|
||||
|
||||
function Country($name, $tld) {
|
||||
$this->NAME = $name;
|
||||
$this->TLD = $tld;
|
||||
}
|
||||
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";
|
||||
}
|
||||
function print_info($prestr="") {
|
||||
echo $prestr."Country: ".$this->NAME."\n";
|
||||
echo $prestr."Top Level Domain: ".$this->TLD."\n";
|
||||
}
|
||||
}
|
||||
|
||||
$cntry = new Country("Peru","pe");
|
||||
|
@ -451,9 +499,9 @@ call_user_method ("print_info", $cntry, "\t");
|
|||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
<simpara>
|
||||
See also <function>call_user_func</function>.
|
||||
</simpara>
|
||||
<simpara>
|
||||
See also <function>call_user_func</function>.
|
||||
</simpara>
|
||||
</refsect1>
|
||||
</refentry>
|
||||
|
||||
|
|
Loading…
Reference in a new issue