//声明一个类MagicTest
class MagicTest{
protected $arr = new array();
//__set()和__get()
public function __set($key,$value){
$arr[$key] = $value;
}
public function __get($key){
return this->$arr[key];
}
//__call()和__callStatic()
public function __call($name, $arguments){
echo "calling ".$name."with parameters: ".implode(‘,‘,$arguments);
}
public static function __callStatic($name,$arguments){
echo "calling static function: ".$name."with parameters: ".implode(‘,‘,$arguments);
}
//__tostring()和__invoke()
public function __tostring(){
}
public function __invoke($name){
}
}
$obj = new MagicTest();
$obj->val = test;//__set($key,$value)被调用
echo $obj->val;//__get()被调用
$obj->runtest(param1,param2);//__call($name,$arguments)被调用
MagicTest::runtest(param1,param2,param3); //__callStatic($name,$arguments)被调用
echo $obj; //tostring()被调用
$obj(param); //invoke($name)被调用
对象属性的操作:
__set();
__get();
对象方法的造作
__call();
__callStatic();
对对象本身的操作
__tostring()
__invoke()
原文:http://www.cnblogs.com/canfengyiyue/p/4370388.html