新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
PHP對象魔術(shù)方法
name = $name; $this->age = $age; $this->sex = $sex; } //echo 對象時(shí)調(diào)用 function __toString(){ return '本人的基本信息如下:我是津沙港灣,30歲,男性
'; } //clone對象時(shí)調(diào)用 function __clone(){ echo '克隆一個(gè)對象,this是一個(gè)副本
'; $this->name; $this->age=20; $this->sex; } /* //提示信息 function __call($method,$args){ echo '在調(diào)用一個(gè)對象中不存的方法時(shí)自動(dòng)調(diào)用__call
'; echo "調(diào)用的方法{$method}(),參數(shù)為:"; print_r($args); echo "不存在
"; } */ //調(diào)用不同的方法名 function __call($method,$args){ if(in_array($method, $this->marr)){ foreach ($args as $arg) echo $arg."
"; }else{ echo "您調(diào)用的方法{$method}()不存在"; } } static function __callstatic($method,$args){ echo "您調(diào)用的靜態(tài)方法{$method}不存在"; } function say() { echo '我是津沙港灣
'; } //串行化 serialize時(shí)調(diào)用 function __sleep(){ echo '指定串行化的對象屬性名
'; return array('name','age');//必須返回?cái)?shù)組 //指定只串行化name和age這個(gè)兩個(gè)對象屬性 //O:6:"Person":2:{s:4:"name";s:12:"津沙港灣";s:3:"age";i:23;} } //反串行化 unserialize時(shí)調(diào)用 function __wakeup(){ echo '反串行化時(shí)自動(dòng)調(diào)用
'; //反串行化時(shí)設(shè)置成員屬性的值 $this->age = 43; } //var_export導(dǎo)出類信息 static function __set_state($arr){//參數(shù)是數(shù)組 echo 'var_export導(dǎo)出類信息時(shí)自動(dòng)調(diào)用
'; $p = new Person("小狀元", 33, "female"); $p->name = $arr['name']; $p->age = $arr['age']; $p->sex = $arr['sex']; return $p; } //調(diào)用函數(shù)方式調(diào)用對象 $p(); function __invoke($a,$b,$c){ echo '調(diào)用函數(shù)方式調(diào)用對象時(shí)自動(dòng)調(diào)用'.$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 對象轉(zhuǎn)成字符串 $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', ); //數(shù)組串行化{"name":"\u6d25\u6c99\u6e2f\u6e7e","age":32,"sex":"male"} $str = json_encode($arr); echo $str; //數(shù)組反串行化 轉(zhuǎn)成對象 $parr = json_decode($str); var_dump($parr);//變成一個(gè)對象 /* object(stdClass)[1] public 'name' => string '津沙港灣' (length=12) public 'age' => int 32 public 'sex' => string 'male' (length=4) */ //變成一個(gè)對象 echo $parr->name; //轉(zhuǎn)成數(shù)組 要加第二個(gè)參數(shù)true $parr = json_decode($str,true); var_dump($parr); //var_export __set_state() $p = new Person("津沙港灣", 20, "male"); //設(shè)定的屬性可以傳到$arr中去 $p->name = '火山島'; $p->age = 500; $p->sex = 'male'; eval('$b='.var_export($p,true).';');//加ture變成字符串 var_dump($b);//類信息以__set_state()中設(shè)定值為準(zhǔn) //調(diào)用函數(shù)方式 $p(1,2,3); //__callstatic 調(diào)用不存在的靜態(tài)方法時(shí)自動(dòng)調(diào)用 Person::speak(); //__autoload 調(diào)用類中的方法時(shí)自動(dòng)加載類文件 function __autoload($classname){ include $classname.'.class.php'; } Test::laugh();
對象反串行化 include 'index.php'; //讀取文件內(nèi)容 字符串 $str = file_get_contents('MrYang.txt'); //反串行化 字符串轉(zhuǎn)成對象 $p = unserialize($str); $p ->say(); echo $p->age;
本文名稱:PHP對象魔術(shù)方法
瀏覽路徑:http://www.ef60e0e.cn/article/pgpjgo.html