溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何快速了解PHP中的魔術方法

發(fā)布時間:2021-10-26 09:37:04 來源:億速云 閱讀:102 作者:iii 欄目:編程語言

這篇文章主要講解了“如何快速了解PHP中的魔術方法”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何快速了解PHP中的魔術方法”吧!

如何快速了解PHP中的魔術方法

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

PHP魔術方法

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

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

__set()方法

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

語法格式如下:

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中的魔術方法

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

__get()方法

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

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

其中參數(shù)$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中的魔術方法

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

__isset() 方法

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

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

其中我們需要注意的是:

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

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

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

  • 如果想要使用 isset() 或 empty() 函數(shù)對類中的私有屬性進行檢測的話,我們只需要在類中添加一個 __isset() 方法就可以了,當在類外部使用 isset() 或 empty() 函數(shù)時,會自動調(diào)用類里面的 __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() 函數(shù)可以用來檢測類中是否定義了該屬性,語法格式為

 property_exists($class_name,$property_name)

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

__unset() 方法

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

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

其中我們需要注意的是:

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

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

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

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

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

<?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);
?>

輸出結果:

如何快速了解PHP中的魔術方法

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

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

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

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

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

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

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

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

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

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

感謝各位的閱讀,以上就是“如何快速了解PHP中的魔術方法”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對如何快速了解PHP中的魔術方法這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

php
AI