首頁 > 後端開發 > PHP問題 > PHP常用的魔術方法(總結分享)

PHP常用的魔術方法(總結分享)

WBOY
發布: 2023-03-16 19:32:02
轉載
1657 人瀏覽過

(推薦教學:PHP影片教學

建構方法/ __construct

當類別被實例化的時候就會呼叫

簡單來說,就是new 一個類別的時候,這個方法就會自動執行

<?php
class autofelix 
{
    public function __construct()
    {
        echo &#39;我是飞兔小哥~&#39;;
    }
}

new autofelix();
登入後複製

析構方法/ __destruct

當類別被銷毀時候自動觸發

可以使用unset 方法觸發該方法

<?php
class autofelix 
{
    public function __destruct()
    {
        echo &#39;我是飞兔小哥,别销毁我~&#39;;
    }
}

unset(new autofelix());
登入後複製

克隆方法/ __clone

#當類別被複製時自動會自動呼叫

<?php
class autofelix 
{
    public function __clone()
    {
        echo &#39;我是飞兔小哥,我想克隆你~&#39;;
    }
}

$a = new autofelix();
clone $a;
登入後複製

非靜態呼叫方法/ __call

當要呼叫的方法不存在或權限不足時候會自動呼叫

例如我在類別的外部呼叫類別內部的private 修飾的方法

<?php
class autofelix 
{
    private function say() 
    {
        echo &#39;我是飞兔小哥~&#39;;
    }

    public function __call($name, $arguments)
    {
        echo &#39;你无权调用&#39; . $name . &#39;方法&#39;;
        die;
    }
}

(new autofelix())->say();
登入後複製

靜​​態呼叫方法/ __callStatic

當要呼叫的靜態方法不存在或權限不足時候會自動呼叫

例如我在類別的外部呼叫類別內部的private 修飾的靜態方法

<?php
class autofelix 
{
    private static function say() 
    {
        echo &#39;我是飞兔小哥~&#39;;
    }

    public function __callStatic($name, $arguments)
    {
        echo &#39;你无权调用&#39; . $name . &#39;方法&#39;;
        die;
    }
}

$a = new autofelix();
$a::say();
登入後複製

列印方法/ __debugInfo

該方法會在var_dump() 類別物件時候被呼叫

如果沒有定義該方法,var_dump() 將會列印出所有的類屬性

<?php
class autofelix 
{
    public function __debugInfo()
    {
        echo &#39;飞兔小哥给你温馨提示&#39;;
    }
}

var_dump(new autofelix());
登入後複製

取得成員屬性/ __get

透過它可以在物件外部取得私有成員屬性

<?php
class autofelix 
{
    private $name = &#39;飞兔小哥&#39;;

    public function __get($name)
    {
        if(in_array($name, [&#39;name&#39;, &#39;age&#39;])) {
           echo $this->name;
        } else {
            echo &#39;不是什么东西都能访问的~&#39;;
        }
    }
}

(new autofelix())->name;
登入後複製

取得不可存取屬性/ __isset

#當對不可存取的屬性呼叫isset() 或則會empty() 時候會被自動呼叫

<?php
class autofelix 
{
    private $name = &#39;飞兔小哥&#39;;

    public function __isset($name)
    {
        if(in_array($name, [&#39;name&#39;, &#39;age&#39;])) {
           echo $this->name;
        } else {
            echo &#39;不是什么东西都能访问的~&#39;;
        }
    }
}

isset(new autofelix()->name);
登入後複製

屬性賦值/ __set

給一個未定義的屬性賦值時候會被觸發

<?php
class autofelix 
{
    public function __set($name, $value)
    {
        echo &#39;你想给&#39; . $name . &#39;赋值&#39; . $value;
    }
}

(new autofelix())->name = &#39;飞兔小哥&#39;;
登入後複製

呼叫物件本身/ __invoke

物件本身不能直接當函數用

如果物件被當作函數呼叫就會觸發該方法

<?php
class autofelix 
{
    public function __invoke()
    {
        echo &#39;你想调用我?&#39;;
    }
}

(new autofelix())();
登入後複製

序列化調用/ __sleep

當在類別的外部呼叫serialize() 時會自動被呼叫

<?php
class autofelix 
{
    public function __sleep()
    {
        echo &#39;我是飞兔小哥~&#39;;
    }
}

serialize(new autofelix());
登入後複製

反序列化呼叫/ __wakeup

當執行unserialize() 方法時會被自動呼叫

<?php
class autofelix 
{
    public function __wakeup()
    {
        echo &#39;我是飞兔小哥~&#39;;
    }
}

unserialize(new autofelix());
登入後複製

輸出字元呼叫/ __toString

當一個類別被當作字串處理時應該回傳什麼

這裡必須傳回一個string 類型不然會報致命錯誤

<?php
class autofelix 
{
    public function __toString()
    {
        return &#39;我是你得不到的对象...&#39;;
    }
}

$a = new autofelix();
echo $a;
登入後複製

刪除呼叫/ __unset

當對不可存取的屬性呼叫unset() 時會被自動呼叫

<?php
class autofelix 
{
    private $name = &#39;飞兔小哥&#39;;

    public function __unset($name)
    {
        echo &#39;别删我,我是你兔哥&#39;;
    }
}

$a = new autofelix();
unset($a->name);
登入後複製

(建議教學:PHP影片教學

以上是PHP常用的魔術方法(總結分享)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
php
來源:jb51.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板