//实例化对象时,会调用对象的__construct方法
$obj = new Object();
//给对象不存在的属性赋值时,会调用对象的__set方法
$obj->title = "hello";
//使用对象不存在的属性时,会调用对象的__get方法
echo $obj->title;
//调用对象不存在的方法时,会调用对象的__call方法
$obj->test("hello",123,567);
//调用不存在的类静态方法时,会调用类的__callStatic方法
Object::staticMethod("static","not found method");
//直接输出对象时,会调用对象的__toString方法
echo $obj;
//将一个对象当作函数一样使用时,会调用对象的__invoke方法
echo $obj("test");
//克隆对象时,会调用对象的__clone方法
$obj2 = clone $obj;
//判断对象属性是否存在时,会调用对象的__isset方法
var_dump(isset($obj->aaa));
//销毁对象属性时,会调用对象的__unset方法
unset($obj->aaa);
class Object{
protected $array = array();
function __construct()
{
echo __METHOD__."你正在实例化对象<br>";
}
function __set($name, $value)
{
$this->array[$name]=$value;
}
function __get($name)
{
return $this->array[$name];
}
function __call($name, $arguments)
{
var_dump($name,$arguments);
return "magic function\n";
}
static function __callStatic($name, $arguments)
{
var_dump($name,$arguments);
return "magic static function";
}
function __toString()
{
return __CLASS__.'<br>';
}
function __invoke($arguments)
{
var_dump($arguments);
return __METHOD__.'<br>';
}
function __clone()
{
echo __METHOD__."你正在克隆对象<br>";
}
function __isset($name)
{
echo __METHOD__."你想判断有没有属性".$name."<br>";
return 1;
}
function __unset($name)
{
echo __METHOD__."你想删除属性".$name."<br>";
}
function __destruct()
{
echo __METHOD__."你正在注销对象<br>";
}
}