欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

PHP對象魔術(shù)方法

<?php
header('content-type:text/html;charset=utf-8');
/*
 * __construct()構(gòu)造方法
 * 在對象初始化時(shí)自動(dòng)調(diào)用
 * __destruct()析構(gòu)方法
 * 在對象釋放資源時(shí)自動(dòng)調(diào)用
 * __get()取值
 * 在取私有屬性值時(shí)自動(dòng)調(diào)用
 * __set()設(shè)置值
 * 在設(shè)置私有屬性值自動(dòng)調(diào)用
 * __isset()判斷值
 * 在使用isset()判斷私有屬性是否存在時(shí)自動(dòng)調(diào)用
 * __unset()釋放值
 * 在使用unset()釋放私有屬性時(shí)自動(dòng)調(diào)用
 * __toString() 用于一個(gè)類被當(dāng)成字符串時(shí)應(yīng)怎樣回應(yīng)
 * __call() 在對象中調(diào)用一個(gè)不可訪問方法時(shí),__call() 會(huì)被調(diào)用。
 * __callstatic()用靜態(tài)方式中調(diào)用一個(gè)不可訪問方法時(shí),__callStatic() 會(huì)被調(diào)用。 :: 
 * __sleep() 在串行化serialize時(shí)自動(dòng)調(diào)用的方法
 *  __wakeup() 在反串行化時(shí)自動(dòng)調(diào)用的方法
 * __set_state() 當(dāng)調(diào)用 var_export() 導(dǎo)出類時(shí),此靜態(tài) 方法會(huì)被調(diào)用。
 * __invoke()當(dāng)嘗試以調(diào)用函數(shù)的方式調(diào)用一個(gè)對象時(shí),__invoke() 方法會(huì)被自動(dòng)調(diào)用。
 * __autoload() 唯一一個(gè)在類外部進(jìn)行定義 自動(dòng)加載 只要在這個(gè)腳本中,需要加載類的時(shí)候(必須用到類名)就會(huì)自動(dòng)調(diào)用這個(gè)方法。
 * 
 * 魔術(shù)方法的總結(jié):
 * 1.自動(dòng)調(diào)用,但不同的魔術(shù)方法,有自己的調(diào)用時(shí)機(jī)
 * 2.都是以__開始的方法
 * 3.所有的魔術(shù)方法,方法名都是固定的
 * 4.如果不寫,就不存在,也就沒有默認(rèn)的功能。
 * 
 * __toString()
 * 1.是在直接使用echo print printf輸出一個(gè)對象引用時(shí),自動(dòng)調(diào)用的方法
 * 2.將對象的基本信息放在__toString()方法內(nèi)部,形成字符串返回。
 * 3.__toString()方法中不能有參數(shù)。
 * 
 * 克隆對象
 * 1.使用clone這個(gè)關(guān)鍵字復(fù)制一個(gè)對象
 * 
 * __clone()魔術(shù)方法
 * 1.是在克隆對象時(shí)自動(dòng)調(diào)用的方法
 * 2.作用:和構(gòu)造方法一樣,是對新克隆的對象進(jìn)行初始化
 * 
 * __call()
 * 1.就是在調(diào)用一個(gè)對象中不存的方法時(shí),自動(dòng)調(diào)用的方法
 * 2.有兩個(gè)參數(shù),第一個(gè)參數(shù)是,調(diào)用的不存在的方法的方法名,第二個(gè)參數(shù)是調(diào)用不存在的方法的方法參數(shù)
 * 作用:
 * 1.可以寫提示信息 
 * 2.將方法的功能相似,但方法名還要不同的,就可以采用這個(gè)方式來完成
 * 
 *
 * 對象串行化  (序列化)
 * 1.將對象轉(zhuǎn)成字符串---串行化
 *  __sleep()
 *  作用:
 *  可以設(shè)置需要串行化的對象的屬性
 *  只要在這個(gè)方法中,返回一個(gè)數(shù)組,在數(shù)組中聲明了那個(gè)屬性名,那個(gè)屬性名就會(huì)被串行化。
 *  沒有聲明的屬性名,不串行化
 *  默認(rèn)這個(gè)方法,全部串行化
 * 2.將字符串轉(zhuǎn)成對象---反串行化
 * __wakeup() 在反串行化時(shí)自動(dòng)調(diào)用
 * 作用:
 * 對象串行化的對象回來后,進(jìn)行對象的初始化,相當(dāng)于__construct()
 * serialize() 函數(shù)會(huì)檢查類中是否存在一個(gè)魔術(shù)方法 __sleep() 如果存在,該方法會(huì)先被調(diào)用,然后才執(zhí)行序列化操作
 * 注意(串行化時(shí)機(jī))
 * 1.將對象需要進(jìn)行網(wǎng)絡(luò)傳輸時(shí)。
 * 2.將對象持久保存時(shí)。
 * 
 * 數(shù)組串行化 json  ----javascript object notation
 * 
 * 1.eval()函數(shù)--檢查并執(zhí)行PHP代碼 
 * $str = "echo 'abc' ;";
 * eval($str);
 */
 

class Person{
    public $name;
    public $age;
    public $sex;
    public $marr = array('eat','drink','song');
    //初始化時(shí)調(diào)用構(gòu)造函數(shù)
    function __construct($name,$age,$sex){
        $this->name = $name;
        $this->age     = $age;
        $this->sex     = $sex;
    }
    //echo 對象時(shí)調(diào)用
    function __toString(){
      return '本人的基本信息如下:我是津沙港灣,30歲,男性<br/>';
    }
    //clone對象時(shí)調(diào)用
    function __clone(){
        echo '克隆一個(gè)對象,this是一個(gè)副本<br/>';
        $this->name;
        $this->age=20;
        $this->sex;
    }
    /*
     //提示信息
    function __call($method,$args){
        echo '在調(diào)用一個(gè)對象中不存的方法時(shí)自動(dòng)調(diào)用__call<br/>';
        echo "調(diào)用的方法{$method}(),參數(shù)為:";
        print_r($args);
        echo "不存在<br/>";
    }
    */
    //調(diào)用不同的方法名
    function __call($method,$args){
                if(in_array($method, $this->marr)){
                    foreach ($args as $arg)
                    echo $arg."<br/>";
                }else{
                    echo "您調(diào)用的方法{$method}()不存在";
                }
    }    
    
    static function __callstatic($method,$args){
        echo "您調(diào)用的靜態(tài)方法{$method}不存在";
    }
    
    function say() {
        echo '我是津沙港灣<br/>';
    }
    
    //串行化 serialize時(shí)調(diào)用
    function __sleep(){
        echo '指定串行化的對象屬性名<br/>';
       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)用<br/>';
        //反串行化時(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)用<br/>';
        $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.'<br/>';
    }
    
}

//原本
$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;

當(dāng)前文章:PHP對象魔術(shù)方法
分享網(wǎng)址:http://chinadenli.net/article10/pgpjgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版移動(dòng)網(wǎng)站建設(shè)、微信小程序、建站公司、域名注冊、品牌網(wǎng)站設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)