mirror of
https://github.com/sigmasternchen/php-doc-en
synced 2025-03-16 00:48:54 +00:00
The overloading methods and members documentation
git-svn-id: https://svn.php.net/repository/phpdoc/en/trunk@163705 c90b9560-bf6c-de11-be94-00142212c4b1
This commit is contained in:
parent
3947c69930
commit
1379ae6570
1 changed files with 173 additions and 2 deletions
|
@ -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>
|
||||
|
||||
|
|
Loading…
Reference in a new issue