1) __set:自动调用set方法 __get
// 以上类Fruit中有两个私有的成员变量,设置了__set和__get以后,
// 可以直接通过下面这种方式对成员变量进行调用。
class Fruit {
private $color;
private $weight;
public function __set($name,$value) {
$this->$name=$value;
}
public function __get($name) {
return $this->$name;
}
}
$fruit = new Fruit();
$fruit->color = 'yellow';
echo $fruit->color;
__isset():当外部试图通过isset()函数访问私有成员时,会调用__iset()魔术方法;
class Test {
private $abc = 'abc';
public function __isset($var) {
return isset($this->$var)? true:false;
}
}
$test = new Test();
var_dump(isset($test->abc));
//打印boolean true
__unset():用户在删除一个私有成员时,会回调该函数:
class Test {
private $abc = 'abc';
public function __unset($var) {
unset($this->$var);
}
}
$test = new Test();
unset($test->abc);
//会调用__unset魔术方法,将此私有变量删除
2) __call:当我们需要调用的方法不存在时,调用此魔术方法;
class Test {
private $abc = 'abc';
public function __call($func,$arguments) {
echo($func."<br/>");
print_r($arguments);
}}
$test = new Test();
$test->goto(1,'ok','3');
打印:
goto
Array ( [0] => 1 [1] => ok [2] => 3 )
__callStatic():当静态方法不存在时,会自动调用此魔术方法:
class Test {
private $abc = 'abc';
public static function __callStatic($method,$arguments) {
echo($method."<br/>");
print_r($arguments);
}
}
// $test = new Test();
Test::gogo(1,'ok','3');
打印:
gogo
Array ( [0] => 1 [1] => ok [2] => 3 )
3) __invoke():当以函数的方式使用对象时,会调用此方法;
class Test {
public function __invoke($args) {
print_r($args);
}
}
$test = new Test();
$test('gogogo....');
打印:gogogo....
4) __toString():当打印对象时,此方法被自动调用
class Test {
public function __toString() {
return 'hello,world';
}
}
$test = new Test();
echo($test);