view plaincopy to clipboardprint?
01.<?php
02.class Caller
03.{
04. public function __call($method, $args)
05. {
06. echo "Method $method called:\n";
07. print_r($args);
08. }
09.}
10.
11.$foo = new Caller();
12.$foo->test(1, 2);
13.?>
<?php
class Caller
{
public function __call($method, $args)
{
echo "Method $method called:\n";
print_r($args);
}
}
$foo = new Caller();
$foo->test(1, 2);
?>
上例将输出:
Method test called:
Array
(
[0] => 1
[1] => 2
)
__get 和 __set 的例子:
view plaincopy to clipboardprint?
01.<?php
02.class a
03.{
04. public $c = 0;
05. public $arr = array();
06.
07. public function __set($k, $v)
08. {
09. echo $k . "\n";
10. echo $v . "\n";
11.
12. $this->arr[$k] = $v;
13. }
14.
15. public function __get($k)
16. {
17. echo "The value of $k is " . $this->arr[$k];
18. }
19.}
20.$a = new a;
21.$a->b = 1; // 成员变量b不存在,所以会调用__set
22.$a->c = 2; // 成员变量c是存在的,所以不调用__set,无任何输出
23.$d = $a->b; // 成员变量b不存在,所以会调用__get
24.?>
<?php
class a
{
public $c = 0;
public $arr = array();
public function __set($k, $v)
{
echo $k . "\n";
echo $v . "\n";
$this->arr[$k] = $v;
}
public function __get($k)
{
echo "The value of $k is " . $this->arr[$k];
}
}
$a = new a;
$a->b = 1; // 成员变量b不存在,所以会调用__set
$a->c = 2; // 成员变量c是存在的,所以不调用__set,无任何输出
$d = $a->b; // 成员变量b不存在,所以会调用__get
?>
上例将输出:
b
1
The value of b is 1