Date: 08/31/00
- Next message: Luca Perugini: "[PHP-DOC] cvs: phpdoc /it/functions com.xml"
- Previous message: Luca Perugini: "[PHP-DOC] cvs: phpdoc /it/functions calendar.xml"
- Next in thread: Egon Schmid: "[PHP-DOC] cvs: phpdoc /it/functions classobj.xml"
- Maybe reply: Egon Schmid: "[PHP-DOC] cvs: phpdoc /it/functions classobj.xml"
- Maybe reply: Luca Perugini: "[PHP-DOC] cvs: phpdoc /it/functions classobj.xml"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
perugini Thu Aug 31 09:18:45 2000 EDT
Modified files:
/phpdoc/it/functions classobj.xml
Log:
Sync with en tree.
Index: phpdoc/it/functions/classobj.xml
diff -u phpdoc/it/functions/classobj.xml:1.2 phpdoc/it/functions/classobj.xml:1.3
--- phpdoc/it/functions/classobj.xml:1.2 Sat Jun 24 00:38:44 2000
+++ phpdoc/it/functions/classobj.xml Thu Aug 31 09:18:45 2000
@@ -2,6 +2,215 @@
<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 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;
+
+ 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
+ <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>
+ </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>,
+ <function>is_subclass_of</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>,
+ <function>is_subclass_of</function>
+ </simpara>
+ </refsect1>
+ </refentry>
+
<refentry id="function.get-class-methods">
<refnamediv>
<refname>get_class_methods</refname>
@@ -19,6 +228,10 @@
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>
</refsect1>
</refentry>
@@ -41,29 +254,87 @@
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>
</refsect1>
</refentry>
<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>
<funcsynopsis>
<funcprototype>
- <funcdef>array <function>get_class_vars</function></funcdef>
+ <funcdef>array <function>get_object_vars</function></funcdef>
<paramdef>object <parameter>obj</parameter></paramdef>
</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>
+ <simpara>
+ See also <function>get_class_methods</function>,
+ <function>get_class_vars</function>
+ </simpara>
+ </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>
+ <simpara>
+ See also <function>get_class</function>,
+ <function>get_parent_class</function>
+ </simpara>
</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>
@@ -83,6 +354,106 @@
<parameter>method_name</parameter> has been defined for the given
<parameter>object</parameter>, false otherwise.
</para>
+ </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: <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>
+
+ <refentry id="function.call-user-method">
+ <refnamediv>
+ <refname>call_user_method</refname>
+ <refpurpose>
+ Call a user method on an specific object
+ </refpurpose>
+ </refnamediv>
+ <refsect1>
+ <title>Description</title>
+ <funcsynopsis>
+ <funcprototype>
+ <funcdef>mixed
+ <function>call_user_method</function>
+ </funcdef>
+ <paramdef>string
+ <parameter>method_name</parameter>
+ </paramdef>
+ <paramdef>object
+ <parameter>obj</parameter>
+ </paramdef>
+ <paramdef>mixed
+ <parameter><optional>parameter</optional></parameter>
+ </paramdef>
+ <paramdef>mixed
+ <parameter><optional>...</optional></parameter>
+ </paramdef>
+ </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.
+ <informalexample>
+ <programlisting role="php">
+<?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");
+?>
+ </programlisting>
+ </informalexample>
+ </para>
+ <simpara>
+ See also <function>call_user_func</function>.
+ </simpara>
</refsect1>
</refentry>
- Next message: Luca Perugini: "[PHP-DOC] cvs: phpdoc /it/functions com.xml"
- Previous message: Luca Perugini: "[PHP-DOC] cvs: phpdoc /it/functions calendar.xml"
- Next in thread: Egon Schmid: "[PHP-DOC] cvs: phpdoc /it/functions classobj.xml"
- Maybe reply: Egon Schmid: "[PHP-DOC] cvs: phpdoc /it/functions classobj.xml"
- Maybe reply: Luca Perugini: "[PHP-DOC] cvs: phpdoc /it/functions classobj.xml"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]

