curt Mon Jul 19 23:51:38 2004 EDT
Modified files:
/phpdoc/en/language/oop5 overloading.xml
Log:
The overloading methods and members documentation
http://cvs.php.net/diff.php/phpdoc/en/language/oop5/overloading.xml?r1=1.1&r2=1.2&ty=u
Index: phpdoc/en/language/oop5/overloading.xml
diff -u phpdoc/en/language/oop5/overloading.xml:1.1
phpdoc/en/language/oop5/overloading.xml:1.2
--- phpdoc/en/language/oop5/overloading.xml:1.1 Sun Jul 11 08:33:25 2004
+++ phpdoc/en/language/oop5/overloading.xml Mon Jul 19 23:51:38 2004
@@ -1,11 +1,182 @@
<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- $Revision: 1.1 $ -->
+<!-- $Revision: 1.2 $ -->
<sect1 id="language.oop5.overloading">
<title>Overloading</title>
+
<para>
- .
+ Both method calls and member accesses can be overloaded via the
+ __call, __get and __set methods. These methods will only be
+ triggered when your object or inherited object doesn't contain the
+ member or method you're trying to access.
</para>
+ <sect2 id="language.oop5.overloading.members">
+ <title>Member overloading</title>
+
+ <methodsynopsis>
+ <type>void</type><methodname>__set</methodname>
+ <methodparam><type>string</type><parameter>name</parameter></methodparam>
+ <methodparam><type>mixed</type><parameter>value</parameter></methodparam>
+ </methodsynopsis>
+ <methodsynopsis>
+ <type>void</type><methodname>__get</methodname>
+ <methodparam><type>string</type><parameter>name</parameter></methodparam>
+ </methodsynopsis>
+
+ <para>
+ Class members can be overloaded to run custom code defined in your class
+ by defining these specially named methods. The <varname>$name</varname>
+ parameter used is the name of the variable that should be set or retrieved.
+ The __set() method's <varname>$value</varname> parameter specifies the
+ value that the object should set set the <varname>$name</varname>.
+ </para>
+
+ <example>
+ <title>overloading with __get and __set example</title>
+ <programlisting role="php">
+<![CDATA[
+<?php
+class Setter {
+ public $n;
+ private $x = array("a" => 1, "b" => 2, "c" => 3);
+
+ function __get($nm) {
+ print "Getting [$nm]\n";
+
+ if (isset($this->x[$nm])) {
+ $r = $this->x[$nm];
+ print "Returning: $r\n";
+ return $r;
+ } else {
+ print "Nothing!\n";
+ }
+ }
+
+ function __set($nm, $val) {
+ print "Setting [$nm] to $val\n";
+
+ if (isset($this->x[$nm])) {
+ $this->x[$nm] = $val;
+ print "OK!\n";
+ } else {
+ print "Not OK!\n";
+ }
+ }
+}
+
+$foo = new Setter();
+$foo->n = 1;
+$foo->a = 100;
+$foo->a++;
+$foo->z++;
+var_dump($foo);
+?>
+]]>
+ </programlisting>
+ <para>
+ Will output:
+ </para>
+ <screen role="php">
+<![CDATA[
+Setting [a] to 100
+OK!
+Getting [a]
+Returning: 100
+Setting [a] to 101
+OK!
+Getting [z]
+Nothing!
+Setting [z] to 1
+Not OK!
+object(Setter)#1 (2) {
+ ["n"]=>
+ int(1)
+ ["x:private"]=>
+ array(3) {
+ ["a"]=>
+ int(101)
+ ["b"]=>
+ int(2)
+ ["c"]=>
+ int(3)
+ }
+}
+]]>
+ </screen>
+
+ </example>
+ </sect2>
+
+ <sect2 id="language.oop5.overloading.methods">
+ <title>Method overloading</title>
+
+ <methodsynopsis>
+ <type>mixed</type><methodname>__call</methodname>
+ <methodparam><type>string</type><parameter>name</parameter></methodparam>
+ <methodparam><type>array</type><parameter>arguments</parameter></methodparam>
+ </methodsynopsis>
+
+ <para>
+ Class methods can be overloaded to run custom code defined in your class
+ by defining this specially named method. The <varname>$name</varname>
+ parameter used is the name as the function name that was requested
+ to be used. The arguments that were passed in the function will be
+ defined as an array in the <varname>$arguments</varname> parameter.
+ The value returned from the __call() method will be returned to the
+ caller of the method.
+ </para>
+
+ <example>
+ <title>overloading with __call example</title>
+ <programlisting role="php">
+ <![CDATA[
+<?php
+class Caller {
+ private $x = array(1, 2, 3);
+
+ function __call($m, $a) {
+ print "Method $m called:\n";
+ var_dump($a);
+ return $this->x;
+ }
+}
+
+$foo = new Caller();
+$a = $foo->test(1, "2", 3.4, true);
+var_dump($a);
+?>
+]]>
+ </programlisting>
+ <para>
+ Will Output:
+ </para>
+ <screen role="php">
+<![CDATA[
+
+Method test called:
+array(4) {
+ [0]=>
+ int(1)
+ [1]=>
+ string(1) "2"
+ [2]=>
+ float(3.4)
+ [3]=>
+ bool(true)
+}
+array(3) {
+ [0]=>
+ int(1)
+ [1]=>
+ int(2)
+ [2]=>
+ int(3)
+}
+]]>
+ </screen>
+ </example>
+
+ </sect2>
</sect1>