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>
  

Reply via email to