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

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

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB轉載
2022-09-05 17:34:231708瀏覽

(推薦教學: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中文網其他相關文章!

陳述:
本文轉載於:jb51.net。如有侵權,請聯絡admin@php.cn刪除