php魔术方法
<?php/**官方文档:http://php.net/manual/zh/language.oop5.magic.php*/classmagic{public$a=array(1);protected$b=array(2);private$c=array(3);public$d='88';public$e=array('huazi'=>55);/***构造方法*当类被实力化时就会被出发此方法*该方法就不用演示了*/function__construct(){echo'构造方法:__construct()<br>';}/***对象被序列化时会先出发此方法*如果没有此魔术方法会把类属性$a,$b,$c序列化*此方法可以指定那些属性被序列化*/publicfunction__sleep(){returnarray('a','b');}/***对象被反序列化时会先出发此方法*/publicfunction__wakeup(){echo1;}/***方法用于一个类被当成字符串时应怎样回应。例如echo$obj;应该显示些什么。*此方法必须返回一个字符串,否则将发出一条E_RECOVERABLE_ERROR级别的致命错误*/publicfunction__toString(){return'echo对象?<br>';}/***自PHP5.1.0起当调用var_export()导出类时,此静态方法会被调用。*本方法的唯一参数是一个数组,其中包含按array('property'=>value,...)格式排列的类属性。*/publicstaticfunction__set_state($array){return$array['d'];}/***PHP5引入了析构函数的概念,这类似于其它面向对象的语言,*如C++。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。**该方法就不用演示了*/publicfunction__destruct(){//echo55;}/***在对象中调用一个不可访问方法时,__call()会被调用*/publicfunction__call($name,$arguments){echo'__call():';//注意:$name的值区分大小写var_dump($name);var_dump($arguments);echo'<br>';if($name=='abc'){$this->$name();}}privatefunctionabc(){echo'999<br>';}/***用静态方式中调用一个不可访问方法时,__callStatic()会被调用。*/publicstaticfunction__callStatic($name,$arguments){echo'__callStatic():';//注意:$name的值区分大小写var_dump($name);var_dump($arguments);echo'<br>';}/***在给不可访问属性赋值时,__set()会被调用。*/publicfunction__set($name,$val){echo'__set:方法<br>';$this->$name=$val;}/***读取不可访问属性的值时,__get()会被调用。*/publicfunction__get($name){echo'__get:方法<br>';return$this->$name;}/***判断属性是否存在时被调用*/publicfunction__isset($name){echo'__isset:方法<br>';returnisset($this->e[$name]);}/***当对不可访问属性调用unset()时,__unset()会被调用。*/publicfunction__unset($name){echo'__unset:方法<br>';unset($this->$name);var_dump($name);}/***对象被克隆时被调用的*/publicfunction__clone(){echo'__clone:方法';echo':被克隆了<br>';}/***当尝试以调用函数的方式调用一个对象时,__invoke()方法会被自动调用。*/publicfunction__invoke($x){echo'__invoke:方法<br>';var_dump($x);}}$ob=newmagic();/***__sleep()事例*var_dump(serialize($ob));*//***__wakeup事例*$ser=serialize($ob);*unserialize($ser);*//***__toString事例*echo$ob;*//***__set_state事例手册里*eval('$b='.var_export($ob,true).';');*var_dump($b);*//***__call事例*$ob->meiyou();*$ob->abc(1,2);*//***__callStatic事例*magic::kao(22);*//***__set事例*print_r($ob);*$ob->c=2;*print_r($ob);*//***__get事例*print_r($ob->c);*//***__isset事例*var_dump(isset($ob->huazi));*//***__unset事例*unset($ob->b);*print_r($ob);*//***__clone事例*$c=clone$ob;*//***__invoke事例*$ob('hehe');*/classa{function__construct(){}function__destruct(){}function__call($name,$val){}staticfunction__callStatic($name,$arguments){}function__get($name){}function__set($name,$val){}function__unset($name){}function__isset($name){}function__toString(){}function__set_state($array){}function__invoke(){}function__clone(){}function__sleep(){}function__wakeup(){}}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。