站長資訊網
        最全最豐富的資訊網站

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

        在之前的文章中給大家帶來了《PHP中clone關鍵字和__clone()方法的使用(實例詳解)》,其中給大家詳細的介紹了PHP中的clone關鍵字和__clone()方法,本篇文章繼續給大家帶來PHP中的魔術方法,希望對大家有幫助!

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

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

        PHP魔術方法

        在PHP面向對象編程中,PHP里有一系列的魔術方法,這些魔術方法看看之前學習的__clone__construct__destruct我們能發現一個共同點,那就是它們都是由__兩個下劃線開始的,并且都是在某種特定的條件下自動調用的。

        那接下來我們來看一看一些常用的魔術方法,結合實例來看一下它們的使用方法。

        __set()方法

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

        語法格式如下:

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

        實例如下:

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

        輸出結果:

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

        由上述實例看出,當當前環境下未定義或不可見的類屬性賦值時,就會調用__set()方法。

        __get()方法

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

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

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

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

        輸出結果:

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

        由上述結果可以看出在調用或獲取當前環境下未定義或不可見的類屬性時,會自動調用 __get() 方法。

        __isset() 方法

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

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

        其中我們需要注意的是:

        參數 $name 為要訪問的屬性名稱。

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

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

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

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

        <?php     class father{         public $study = '好好學習';         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); ?>

        輸出結果:

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

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

         property_exists($class_name,$property_name)

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

        __unset() 方法

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

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

        其中我們需要注意的是:

        • 參數 $name 為要訪問的屬性名稱。

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

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

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

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

        <?php     class father{         public $name = 'http://c.biancheng.net/php/';         private $study = 'C語言中文網';         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); ?>

        輸出結果:

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

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

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

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

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

        • __toString() — 把對象轉換成字符串時自動調用

        • __invoke() — 當嘗試把對象當方法調用時自動調用

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

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

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

        • __set_state() — 當使用 var_export() 函數時自動調用,接受一個數組參數

        大家如果感興趣的話,可以點擊《PHP視頻教程》進行

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 国产精品视频二区不卡| 99精品久久精品| 亚洲精品无码久久久久| 久久久久久久99精品免费观看| 亚洲第一区精品观看| 99久久国产综合精品五月天喷水 | 一本久久a久久精品综合香蕉| 777欧美午夜精品影院| 国产精品岛国久久久久| 精品人妻中文字幕有码在线| 香港三级精品三级在线专区 | 久久精品女人天堂AV麻| 99久久精品国产综合一区| 国产国产精品人在线视| 亚洲av无码乱码国产精品| 久久久精品久久久久久| 国产精品VIDEOSSEX久久发布| 久久国产精品久久精品国产| 97精品人妻系列无码人妻| 久久精品国产网红主播| 亚洲精品一品区二品区三品区| 久久久久成人精品无码| 国产免费久久精品丫丫| 91精品国产品国语在线不卡| 国内精品手机在线观看视频| 成人国内精品久久久久一区| 国产精品无圣光一区二区| 久久久国产精品亚洲一区| 日韩欧精品无码视频无删节| 亚洲AV午夜福利精品一区二区| 亚洲精品国产成人片| 亚洲av成人无码久久精品| 午夜精品一区二区三区免费视频| 亚洲精品V欧洲精品V日韩精品| 亚洲精品午夜无码电影网| 中文字幕精品久久久久人妻| 亚洲乱码精品久久久久..| 久久久久久亚洲Av无码精品专口| 人人妻人人澡人人爽欧美精品| 精品少妇无码AV无码专区| 国产99视频精品免视看7|