PHP中__sleep()方法詳解

2020-07-16 10:05:40
__sleep(),執行serialize()時,先會呼叫這個函數

serialize() 函數會檢查類中是否存在一個魔術方法 __sleep()。如果存在,則該方法會優先被呼叫,然後才執行序列化操作。

此功能可以用於清理物件,並返回一個包含物件中所有應被序列化的變數名稱的陣列。

如果該方法未返回任何內容,則 NULL 被序列化,並產生一個 E_NOTICE 級別的錯誤。

注意:

__sleep() 不能返回父類別的私有成員的名字。這樣做會產生一個 E_NOTICE 級別的錯誤。可以用 Serializable 介面來替代。

作用:

__sleep() 方法常用於提交未提交的資料,或類似的清理操作。同時,如果有一些很大的物件,但不需要全部儲存,這個功能就很好用。

具體請參考如下程式碼:

<?php
class Person
{
    public $sex;
    public $name;
    public $age;
    public function __construct($name="",  $age=25, $sex='男')
    {
        $this->name = $name;
        $this->age  = $age;
        $this->sex  = $sex;
    }
    /**
     * @return array
     */
    public function __sleep() {
        echo "當在類外部使用serialize()時會呼叫這裡的__sleep()方法<br>";
        $this->name = base64_encode($this->name);
        return array('name', 'age'); // 這裡必須返回一個數值,裡邊的元素表示返回的屬性名稱
    }
}
$person = new Person('小明'); // 初始賦值
echo serialize($person);
echo '<br/>';

程式碼執行結果:

當在類外部使用serialize()時會呼叫這裡的__sleep()方法
O:6:"Person":2:{s:4:"name";s:8:"5bCP5piO";s:3:"age";i:25;}

以上就是PHP中__sleep()方法詳解的詳細內容,更多請關注TW511.COM其它相關文章!