站長資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

五分鐘帶你了解PHP中的魔術(shù)方法(實(shí)例詳解)

在之前的文章中給大家?guī)砹恕禤HP中clone關(guān)鍵字和__clone()方法的使用(實(shí)例詳解)》,其中給大家詳細(xì)的介紹了PHP中的clone關(guān)鍵字和__clone()方法,本篇文章繼續(xù)給大家?guī)鞵HP中的魔術(shù)方法,希望對大家有幫助!

五分鐘帶你了解PHP中的魔術(shù)方法(實(shí)例詳解)

在我們之前的文章中,我們介紹__clone()方法的時候提到,這是魔術(shù)方法的一種,《帶你分清類中的構(gòu)造函數(shù)與析構(gòu)函數(shù)》中也提到的構(gòu)造函數(shù)與析構(gòu)函數(shù)也叫作構(gòu)造方法與析構(gòu)方法,他們也是魔術(shù)方法的一種。那么什么是魔術(shù)方法?它有哪些常用的方法?它又是怎樣使用的?接下來我們一起來看一看吧。

PHP魔術(shù)方法

在PHP面向?qū)ο缶幊讨校琍HP里有一系列的魔術(shù)方法,這些魔術(shù)方法看看之前學(xué)習(xí)的__clone__construct__destruct我們能發(fā)現(xiàn)一個共同點(diǎn),那就是它們都是由__兩個下劃線開始的,并且都是在某種特定的條件下自動調(diào)用的。

那接下來我們來看一看一些常用的魔術(shù)方法,結(jié)合實(shí)例來看一下它們的使用方法。

__set()方法

__set()方法用于在為當(dāng)前環(huán)境下未定義或不可見的類屬性賦值時,需要注意的是所有的魔術(shù)方法,都是在某種特定條件下自動調(diào)用的,為當(dāng)前環(huán)境下未定義或不可見的類屬性賦值時就是__set()方法調(diào)用的特定條件。

語法格式如下:

public function __set(要操作的變量, 要操作變量的值){     ... ... ; }

實(shí)例如下:

<?php     class father{         public $study1;         private $study2;         public function __set($key, $value){             echo '為“'.$key.'”賦值“'.$value.'”失敗!<br>';         }     }     $object          = new father();     $object -> study1  = '好好學(xué)習(xí)';     $object -> study2   = '天天向上';     $object -> study3 = '福如東海'; ?>

輸出結(jié)果:

五分鐘帶你了解PHP中的魔術(shù)方法(實(shí)例詳解)

由上述實(shí)例看出,當(dāng)當(dāng)前環(huán)境下未定義或不可見的類屬性賦值時,就會調(diào)用__set()方法。

__get()方法

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

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

其中參數(shù)$name表示要操作的變量名稱,下面通過實(shí)例我們來看一下__get()方法的使用,實(shí)例如下:

<?php     class father{         public $study = '好好學(xué)習(xí)';         private $study1 = '天天向上';         public function __get($study1){             echo '獲取:“'.$study1.'”失敗!';         }     }     $object = new father();     echo $object -> study.'<br>';     echo $object -> study1.'<br>';     echo $object -> study2.'<br>'; ?>

輸出結(jié)果:

五分鐘帶你了解PHP中的魔術(shù)方法(實(shí)例詳解)

由上述結(jié)果可以看出在調(diào)用或獲取當(dāng)前環(huán)境下未定義或不可見的類屬性時,會自動調(diào)用 __get() 方法。

__isset() 方法

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

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

其中我們需要注意的是:

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

  • isset() 函數(shù)是用來檢查一個變量是否存在并且還要判斷不為 NULL,如果傳入的變量存在則傳回 true,不存在傳回 false。

  • empty() 函數(shù)是用來檢查一個變量是否為空,如果變量的值等于 FALSE,那么這個變量會被認(rèn)為不存在。

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

接下來我們通過實(shí)例來看一下__isset()方法的使用,實(shí)例如下:

<?php     class father{         public $study = '好好學(xué)習(xí)';         private $name = '天天向上';         public function __isset($name){             if(property_exists('Website', $name)){                 echo '成員屬性:“'.$name.'”存在!<br>';             }else{                 echo '成員屬性:“'.$name.'”不存在!<br>';             }         }     }     $object = new father();     isset($object -> mother);     isset($object -> name); ?>

輸出結(jié)果:

五分鐘帶你了解PHP中的魔術(shù)方法(實(shí)例詳解)

其中我們需要注意的是,property_exists() 函數(shù)可以用來檢測類中是否定義了該屬性,語法格式為

 property_exists($class_name,$property_name)

其中 $class_name 為字符串形式的類名,即判斷類 class_name 中是否定義了 property_name 屬性。

__unset() 方法

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

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

其中我們需要注意的是:

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

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

  • 可以使用 unset() 函數(shù)在類外部去刪除類中的成員屬性。如果要刪除類中的公有屬性的話直接使用 unset() 函數(shù)即可;

  • 如果要刪除類中的私有屬性的話,則需要在類中添加一個 __unset() 方法。

接下來我們通過實(shí)例來看一下__unset()方法的使用,實(shí)例如下:

<?php     class father{         public $name = 'http://c.biancheng.net/php/';         private $study = 'C語言中文網(wǎng)';         public function __unset($study){             if(property_exists('father', $study)){                 unset($this->$study);                 echo '移除成員屬性:“'.$study.'”成功!<br>';             }else{                 echo '成員屬性:“'.$study.'”不存在!<br>';             }         }     }     $object = new father();     unset($object->name);     unset($object->study);     unset($object->study1); ?>

輸出結(jié)果:

五分鐘帶你了解PHP中的魔術(shù)方法(實(shí)例詳解)

由上述實(shí)例看出當(dāng)在類外部對類中不可訪問或不存在的屬性使用 unset() 函數(shù)時,__unset() 方法會被自動調(diào)用。

上述實(shí)例中給大家介紹了一些常用的魔術(shù)方法,但這并不是魔術(shù)方法的全部,那接下來再給大家列舉一些魔術(shù)方法:

  • __call() — 調(diào)用一個不存在的方法時自動調(diào)用

  • __sleep() — 使用 serialize 序列化時自動調(diào)用

  • __toString() — 把對象轉(zhuǎn)換成字符串時自動調(diào)用

  • __invoke() — 當(dāng)嘗試把對象當(dāng)方法調(diào)用時自動調(diào)用

  • __wakeup() — 使用 unserialize 反序列化時自動調(diào)用

  • __callStatic() — 調(diào)用一個不存在的靜態(tài)方法時自動調(diào)用

  • __debugInfo() — 使用 var_dump() 打印對象信息時自動調(diào)用

  • __set_state() — 當(dāng)使用 var_export() 函數(shù)時自動調(diào)用,接受一個數(shù)組參數(shù)

大家如果感興趣的話,可以點(diǎn)擊《PHP視頻教程》進(jìn)行

贊(0)
分享到: 更多 (0)
網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號
国产精品香蕉成人网在线观看| 精品人妻AV一区二区三区| 亚洲国产精品不卡毛片a在线| 日韩A无码AV一区二区三区| 国产日产欧产精品精品浪潮| 国产精品爱啪在线线免费观看| 99精品国产高清一区二区| 国产精品免费大片| 国产精品亚洲一区二区三区在线 | 99久久综合国产精品免费| 亚洲国产精品张柏芝在线观看| 伊人久久精品线影院| 亚洲国产成人一区二区精品区| 国产AV午夜精品一区二区三| 久久亚洲国产精品123区| 国产精品成人精品久久久| 成人午夜精品网站在线观看| 日韩在线视频网址| 日韩高清中文字幕| 日韩精品亚洲专区在线影视| 亚洲欧美日韩自偷自拍| 精品国产日韩亚洲一区91| 日韩a级毛片免费观看| 免费精品视频在线| 天天爽夜夜爽8888视频精品| 精品女同一区二区三区免费播放| 日韩在线视精品在亚洲| 思思久久99热免费精品6| 亚洲AV永久无码精品一区二区国产 | 日韩精品真人荷官无码| 少妇人妻偷人精品无码视频| 亚洲综合一区二区国产精品| 日韩精品国产另类专区| 久久国产精品77777| 久久精品国产免费观看三人同眠| 91亚洲国产成人久久精品| 狠狠色香婷婷久久亚洲精品| 久久只有这里有精品4| 午夜精品久久久久成人| 国产精品无码AV不卡| 国产精品无码一区二区三区免费|