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:
Jesus M. Castagnetto 2000-09-04 08:41:01 +00:00
parent 47c6fa3937
commit b268d04eb3

View file

@ -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">
&lt;?php
// base class with member properties and methods
class Vegetable {
var $edible;
var $color;
var $edible;
var $color;
function Vegetable( $edible, $color=&quot;green&quot; ) {
$this-&gt;edible = $edible;
$this-&gt;color = $color;
}
function Vegetable( $edible, $color=&quot;green&quot; ) {
$this-&gt;edible = $edible;
$this-&gt;color = $color;
}
function is_edible() {
return $this-&gt;edible;
}
function is_edible() {
return $this-&gt;edible;
}
function what_color() {
return $this-&gt;color;
}
function what_color() {
return $this-&gt;color;
}
} // end of class Vegetable
// extends the base class
class Spinach extends Vegetable {
var $cooked = false;
var $cooked = false;
function Spinach() {
$this-&gt;Vegetable( true, &quot;green&quot; );
}
function Spinach() {
$this-&gt;Vegetable( true, &quot;green&quot; );
}
function cook_it() {
$this-&gt;cooked = true;
}
function cook_it() {
$this-&gt;cooked = true;
}
function is_cooked() {
return $this-&gt;cooked;
}
function is_cooked() {
return $this-&gt;cooked;
}
} // end of class Spinach
?&gt;
</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">
&lt;pre&gt;
&lt;?php
@ -94,25 +94,25 @@ include &quot;classes.inc&quot;;
// utility functions
function print_vars($obj) {
$arr = get_object_vars($obj);
while (list($prop, $val) = each($arr))
echo &quot;\t$prop = $val\n&quot;;
$arr = get_object_vars($obj);
while (list($prop, $val) = each($arr))
echo &quot;\t$prop = $val\n&quot;;
}
function print_methods($obj) {
$arr = get_class_methods(get_class($obj));
foreach ($arr as $method)
echo &quot;\tfunction $method()\n&quot;;
$arr = get_class_methods(get_class($obj));
foreach ($arr as $method)
echo &quot;\tfunction $method()\n&quot;;
}
function class_parentage($obj, $class) {
global $$obj;
if (is_subclass_of($$obj, $class)) {
echo &quot;Object $obj belongs to class &quot;.get_class($$obj);
echo &quot; a subclass of $class\n&quot;;
} else {
echo &quot;Object $obj does not belong to a subclass of $class\n&quot;;
}
global $$obj;
if (is_subclass_of($$obj, $class)) {
echo &quot;Object $obj belongs to class &quot;.get_class($$obj);
echo &quot; a subclass of $class\n&quot;;
} else {
echo &quot;Object $obj does not belong to a subclass of $class\n&quot;;
}
}
// instantiate 2 objects
@ -138,27 +138,27 @@ class_parentage(&quot;leafy&quot;, &quot;Spinach&quot;);
class_parentage(&quot;leafy&quot;, &quot;Vegetable&quot;);
?&gt;
&lt;/pre&gt;
</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">
&lt;?php
class Point2D {
var $x, $y;
var $label;
function Point2D($x, $y) {
$this-&gt;x = $x;
$this-&gt;y = $y;
}
function setLabel($label) {
$this-&gt;label = $label;
}
function getPoint() {
return array("x" =&gt; $this-&gt;x,
"y" =&gt; $this-&gt;y,
"label" =&gt; $this-&gt;label);
}
}
$p1 = new Point2D(1.233, 3.445);
print_r(get_object_vars($p1));
// "$label" is declared but not defined
// Array
// (
// [x] =&gt; 1.233
// [y] =&gt; 3.445
// )
$p1-&gt;setLabel("point #1");
print_r(get_object_vars($p1));
// Array
// (
// [x] =&gt; 1.233
// [y] =&gt; 3.445
// [label] =&gt; point #1
// )
?&gt;
</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">
&lt;?php
class Country {
var $NAME;
var $TLD;
function Country($name, $tld) {
$this-&gt;NAME = $name;
$this-&gt;TLD = $tld;
}
var $NAME;
var $TLD;
function Country($name, $tld) {
$this-&gt;NAME = $name;
$this-&gt;TLD = $tld;
}
function print_info($prestr=&quot;&quot;) {
echo $prestr.&quot;Country: &quot;.$this-&gt;NAME.&quot;\n&quot;;
echo $prestr.&quot;Top Level Domain: &quot;.$this-&gt;TLD.&quot;\n&quot;;
}
function print_info($prestr=&quot;&quot;) {
echo $prestr.&quot;Country: &quot;.$this-&gt;NAME.&quot;\n&quot;;
echo $prestr.&quot;Top Level Domain: &quot;.$this-&gt;TLD.&quot;\n&quot;;
}
}
$cntry = new Country(&quot;Peru&quot;,&quot;pe&quot;);
@ -451,9 +499,9 @@ call_user_method (&quot;print_info&quot;, $cntry, &quot;\t&quot;);
</programlisting>
</informalexample>
</para>
<simpara>
See also <function>call_user_func</function>.
</simpara>
<simpara>
See also <function>call_user_func</function>.
</simpara>
</refsect1>
</refentry>