1.__get,__set:当调用不存在的变量时,__set方法自动去赋值,__get方法自动取值
namespace Com;
class Object{
public $array = array();
function __set($key,$value){
$this->array[$key] = $value;
}
function __get($key){
return $this->array[$key];
}
}
$ob = new \Com\Object();
$ob->title = "hello”; //title变量不存在,此时会调用__set方法去设置变量;
echo $ob->title;
2.__call当方法不存在时会自动调用__call
__callStatic;当静态方法不存在时会自动调用__callStatic
function __call($func,$params){
var_dump($func,$params);
return "magic func\n";
}
$ob = new \Com\Object();
echo $ob->test("hello",123);
function __callStatic($name, $arguments)
{
return "static";
}
echo \Com\Object::test("hello",123);
3.当echo一个对象时会自动调用__toString;
function __toString()
{
return __CLASS__;
}
$ob = new \Com\Object();
echo $ob;
4.__invoke当把对象当成函数调用时会自动调用invoke方法
function __invoke()
{
return "invoke";
}
$ob = new \Com\Object();
echo $ob();