PHP对象魔术方法
name = $name; $this->age = $age; $this->sex = $sex; } //echo 对象时调用 function __toString(){ return '本人的基本信息如下:我是津沙港湾,30岁,男性
'; } //clone对象时调用 function __clone(){ echo '克隆一个对象,this是一个副本
'; $this->name; $this->age=20; $this->sex; } /* //提示信息 function __call($method,$args){ echo '在调用一个对象中不存的方法时自动调用__call
'; echo "调用的方法{$method}(),参数为:"; print_r($args); echo "不存在
"; } */ //调用不同的方法名 function __call($method,$args){ if(in_array($method, $this->marr)){ foreach ($args as $arg) echo $arg."
"; }else{ echo "您调用的方法{$method}()不存在"; } } static function __callstatic($method,$args){ echo "您调用的静态方法{$method}不存在"; } function say() { echo '我是津沙港湾
'; } //串行化 serialize时调用 function __sleep(){ echo '指定串行化的对象属性名
'; return array('name','age');//必须返回数组 //指定只串行化name和age这个两个对象属性 //O:6:"Person":2:{s:4:"name";s:12:"津沙港湾";s:3:"age";i:23;} } //反串行化 unserialize时调用 function __wakeup(){ echo '反串行化时自动调用
'; //反串行化时设置成员属性的值 $this->age = 43; } //var_export导出类信息 static function __set_state($arr){//参数是数组 echo 'var_export导出类信息时自动调用
'; $p = new Person("小状元", 33, "female"); $p->name = $arr['name']; $p->age = $arr['age']; $p->sex = $arr['sex']; return $p; } //调用函数方式调用对象 $p(); function __invoke($a,$b,$c){ echo '调用函数方式调用对象时自动调用'.$a.$b.$c.'
'; } } //原本 $p = new Person('津沙港湾',23,'男'); //toString() echo $p; //__call() $p->eat('鱼','肉'); $p->drink('茶','酒'); $p->song('歌','戏'); //副本 __clone() $a = clone $p; echo $a->age; //serialize 对象转成字符串 $str = serialize($p); //O:6:"Person":4:{s:4:"name";s:12:"津沙港湾";s:3:"age";i:23;s:3:"sex";s:3:"男";s:4:"marr";a:3:{i:0;s:3:"eat";i:1;s:5:"drink";i:2;s:4:"song";}} file_put_contents("MrYang.txt", $str); echo '对象串行化成功,保存到MrYang文件中'; $arr = array( 'name' => '津沙港湾', 'age' => 32, 'sex' => 'male', ); //数组串行化{"name":"\u6d25\u6c99\u6e2f\u6e7e","age":32,"sex":"male"} $str = json_encode($arr); echo $str; //数组反串行化 转成对象 $parr = json_decode($str); var_dump($parr);//变成一个对象 /* object(stdClass)[1] public 'name' => string '津沙港湾' (length=12) public 'age' => int 32 public 'sex' => string 'male' (length=4) */ //变成一个对象 echo $parr->name; //转成数组 要加第二个参数true $parr = json_decode($str,true); var_dump($parr); //var_export __set_state() $p = new Person("津沙港湾", 20, "male"); //设定的属性可以传到$arr中去 $p->name = '火山岛'; $p->age = 500; $p->sex = 'male'; eval('$b='.var_export($p,true).';');//加ture变成字符串 var_dump($b);//类信息以__set_state()中设定值为准 //调用函数方式 $p(1,2,3); //__callstatic 调用不存在的静态方法时自动调用 Person::speak(); //__autoload 调用类中的方法时自动加载类文件 function __autoload($classname){ include $classname.'.class.php'; } Test::laugh();
对象反串行化 include 'index.php'; //读取文件内容 字符串 $str = file_get_contents('MrYang.txt'); //反串行化 字符串转成对象 $p = unserialize($str); $p ->say(); echo $p->age;
当前文章:PHP对象魔术方法
本文链接:http://pwwzsj.com/article/pgpjgo.html