日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
PHP魔術(shù)方法(附帶實(shí)例)
在面向?qū)ο缶幊讨校琾hp 提供了一系列的魔術(shù)方法,這些魔術(shù)方法為編程提供了很多便利,在 PHP 中的作用是非常重要的。PHP 中的魔術(shù)方法通常以__(兩個下劃線)開始,并且不需要顯式的調(diào)用而是在某種特定條件下自動調(diào)用的。

在衡東等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、網(wǎng)站建設(shè) 網(wǎng)站設(shè)計制作按需求定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)營銷推廣,外貿(mào)網(wǎng)站制作,衡東網(wǎng)站建設(shè)費(fèi)用合理。

前面我們介紹的構(gòu)造函數(shù) __construct 和析構(gòu)函數(shù) __destruct 就屬于 PHP 中的魔術(shù)方法。PHP 中的魔術(shù)方法如下表所示:

魔術(shù)方法 作用
__construct() 實(shí)例化類時自動調(diào)用
__destruct() 類對象使用結(jié)束時自動調(diào)用
__set() 在給未定義的屬性賦值時自動調(diào)用
__get() 調(diào)用未定義的屬性時自動調(diào)用
__isset() 使用 isset() 或 empty() 函數(shù)時自動調(diào)用
__unset() 使用 unset() 時自動調(diào)用
__sleep() 使用 serialize 序列化時自動調(diào)用
__wakeup() 使用 unserialize 反序列化時自動調(diào)用
__call() 調(diào)用一個不存在的方法時自動調(diào)用
__callStatic() 調(diào)用一個不存在的靜態(tài)方法時自動調(diào)用
__toString() 把對象轉(zhuǎn)換成字符串時自動調(diào)用
__invoke() 當(dāng)嘗試把對象當(dāng)方法調(diào)用時自動調(diào)用
__set_state() 當(dāng)使用 var_export() 函數(shù)時自動調(diào)用,接受一個數(shù)組參數(shù)
__clone() 當(dāng)使用 clone 復(fù)制一個對象時自動調(diào)用
__debugInfo() 使用 var_dump() 打印對象信息時自動調(diào)用

前面我們已經(jīng)介紹過了《構(gòu)造函數(shù)》和《析構(gòu)函數(shù)》,下面我們再來介紹幾個常用的魔術(shù)方法。

1、__set() 方法

在為當(dāng)前環(huán)境下未定義或不可見的類屬性賦值時,會自動調(diào)用 __set() 方法。定義該方法的語法格式如下:

public function __set($key, $value){
    ... ... ;
}

其中,參數(shù) $key 是要操作的變量名稱,$value 為變量 $key 的值。

【示例】下面使用簡單的示例來演示一下 __set() 方法的使用。

';
        }
    }

    $object          = new Website();
    $object -> name  = 'C語言中文網(wǎng)';
    $object -> url   = 'http://c.biancheng.net/php/';
    $object -> title = 'PHP教程';
?>

運(yùn)行結(jié)果如下:

為“url”賦值“http://c.biancheng.net/php/”失??!
為“title”賦值“PHP教程”失??!

利用 __set() 方法的特性,我們可以通過 __set() 方法為類中的使用 private 關(guān)鍵詞修飾的屬性進(jìn)行賦值或修改。如下所示:

$key)){
                $this -> $key = $value;
            }else{
                echo '為“'.$key.'”賦值“'.$value.'”失敗!
'; } } public function getUrl(){ echo $this -> url; } } $object = new Website(); $object -> name = 'C語言中文網(wǎng)'; $object -> url = 'http://c.biancheng.net/php/'; $object -> title = 'PHP教程'; $object -> getUrl(); ?>

運(yùn)行結(jié)果如下:

為“title”賦值“PHP教程”失敗!
http://c.biancheng.net/php/

2、__get() 方法

在調(diào)用或獲取當(dāng)前環(huán)境下未定義或不可見的類屬性時,會自動調(diào)用 __get() 方法,定義該方法的語法格式如下:

public function __get($name){
    ... ... ;
}

參數(shù) $name 為要操作的變量名稱。

【示例】下面使用簡單的示例來演示一下 __get() 方法的使用。

 url.'
'; echo $object -> name.'
'; echo $object -> title.'
'; ?>

運(yùn)行結(jié)果如下:

http://c.biancheng.net/php/
獲?。骸皀ame”失敗!
獲?。骸皌itle”失??!

3、__isset() 方法

當(dāng)在類外部對類中不可訪問或不存在的屬性使用 isset() 或 empty() 函數(shù)時,會自動調(diào)用 __isset() 方法,該方法的語法格式如下:

public function __isset($name){
    ... ... ;
}

參數(shù) $name 為要訪問的屬性名稱。

isset() 函數(shù)可以檢查一個變量是否存在并且不為 NULL,傳入一個變量作為參數(shù),如果傳入的變量存在則傳回 true,否則傳回 false。

empty() 函數(shù)可以檢查一個變量是否為空,同樣需要傳入一個變量作為參數(shù),如果變量并不存在,或者變量的值等于 FALSE,那么這個變量會被認(rèn)為不存在。

通過前面的學(xué)習(xí)我們知道,類中的公有成員可以在類外訪問,而私有成員則無法在類外訪問。也就是說,我們可以使用 isset() 或 empty() 函數(shù)來檢查類中的公有屬性是否存在,而對類中的私有屬性這兩個函數(shù)就無效了。

如果想要使用 isset() 或 empty() 函數(shù)對類中的私有屬性進(jìn)行檢測的話,我們只需要在類中添加一個 __isset() 方法就可以了,當(dāng)在類外部使用 isset() 或 empty() 函數(shù)時,會自動調(diào)用類里面的 __isset() 方法。

【示例】下面使用簡單的示例來演示一下 __isset() 方法的使用。

';
            }else{
                echo '成員屬性:“'.$name.'”不存在!
'; } } } $object = new Website(); isset($object -> title); isset($object -> name); ?>

運(yùn)行結(jié)果如下:

成員屬性:“title”不存在!
成員屬性:“name”存在!

提示:property_exists() 函數(shù)可以用來檢測類中是否定義了該屬性,語法格式為 property_exists($class_name,$property_name),其中 $class_name 為字符串形式的類名,即判斷類 class_name 中是否定義了 property_name 屬性。

4、__unset() 方法

當(dāng)在類外部對類中不可訪問或不存在的屬性使用 unset() 函數(shù)時,__unset() 方法會被自動調(diào)用,該方法的語法格式如下:

public function __unset($name){
    ... ... ;
}

參數(shù) $name 為要訪問的屬性名稱。

我們先來看一下 unset() 函數(shù),unset() 函數(shù)的作用是刪除指定的變量,需要傳入一個或多個變量作為參數(shù),另外,該函數(shù)沒有返回值。

同樣,我們也可以使用 unset() 函數(shù)在類外部去刪除類中的成員屬性。與上面介紹的 __isset() 方法相似,如果要刪除類中的公有屬性的話直接使用 unset() 函數(shù)即可;如果要刪除類中的私有屬性的話,則需要在類中添加一個 __unset() 方法。

【示例】下面使用簡單的示例來演示一下 __unset() 方法的使用。

$name);
                echo '移除成員屬性:“'.$name.'”成功!
'; }else{ echo '成員屬性:“'.$name.'”不存在!
'; } } } $object = new Website(); unset($object->url); unset($object->name); unset($object->abc); ?>

運(yùn)行結(jié)果如下:

移除成員屬性:“name”成功!
成員屬性:“abc”不存在!

5、__call() 方法

當(dāng)調(diào)用類中一個不可訪問或不存在的方法時,__call() 方法會被調(diào)用。該方法的語法格式如下:

public function __call($name, $arguments){
    ... ... ;
}

其中,$name 為要調(diào)用的方法名稱,$arguments 為傳遞給 $name 的參數(shù)所組成的數(shù)組。

當(dāng)調(diào)用的方法不存在時會自動調(diào)用 __call() 方法,程序會繼續(xù)執(zhí)行下去,從而可以避免當(dāng)調(diào)用方法不存在時產(chǎn)生錯誤所導(dǎo)致的程序終止。

【示例】下面使用簡單的示例來演示一下 __call() 方法的使用。

';
        }
        public function __call($name, $arguments){
            echo '你所調(diào)用的方法:'.$name;
            if(!empty($arguments)){
                echo '【以及參數(shù):';
                print_r($arguments);
                echo '】';
            }
            echo ' 不存在!
'; } } $obj = new Website(); $obj -> say(); $obj -> url('http://c.biancheng.net/php/'); $obj -> title(); ?>

運(yùn)行結(jié)果如下:

Welcome C語言中文網(wǎng)!
你所調(diào)用的方法:url【以及參數(shù):Array ( [0] => http://c.biancheng.net/php/ ) 】 不存在!
你所調(diào)用的方法:title 不存在!

6、__clone() 方法

可以使用 clone 關(guān)鍵字復(fù)制對象,當(dāng)復(fù)制完成時,如果定義了 __clone() 方法,則新創(chuàng)建的對象(復(fù)制生成的對象)中的 __clone() 方法會被自動調(diào)用,通過該方法我們可以做一些必要的操作。__clone() 方法的語法格式如下:

public function __clone(){
    ... ... ;
}

該函數(shù)不需要傳入?yún)?shù)。

【示例】下面使用簡單的示例來演示一下 __clone() 方法的使用。

';
        }
        public function __clone(){
            echo '對象克隆成功
'; } } $obj = new Website(); $obj2 = clone $obj; echo '
';
    var_dump($obj, $obj2);
?>

運(yùn)行結(jié)果如下:

對象克隆成功
object(Website)#1 (0) {
}
object(Website)#2 (0) {
}


標(biāo)題名稱:PHP魔術(shù)方法(附帶實(shí)例)
分享URL:http://www.dlmjj.cn/article/cddphid.html