PHP魔術方法簡介

2021-07-29 11:37:19 字數 3665 閱讀 1548

<?php

/** * created by phpstorm.

* user: mins

* date: 2017/3/24

* time: 10:20

*/class magicfunction

/*** 析構函式通常在物件被銷毀時呼叫,析構函式不接收任何引數。

* 經常在析構函式中執行一些清理工作,比如關閉資料庫連線等

*/public function __destruct()

/*** 魔術方法__get()在我們嘗試訪問乙個不存在的屬性時會被呼叫。

* 它接收乙個引數,該引數表示訪問屬性的名字,並且將該屬性的值返回。

*@param $name

*@return string

*/public function __get($name)

/*** __set()魔術方法在我們嘗試修改乙個不可訪問的屬性時會被呼叫,

* 它接收兩個引數,乙個表示屬性的名字,乙個表示屬性的值。

*@param $name

*@param $value

*@return string

*/function __set($name, $value)

/*** __isset()魔術方法在對乙個不可訪問的屬性呼叫isset()方法時會被呼叫,

* 它接收乙個引數,表示屬性的名字。它應該返回乙個布林值,用來表示該屬性是否存在

*@param $name

*@return string

*/public function __isset($name)

/*** __unset()魔術方法在呼叫unset()函式銷毀乙個不能訪問的屬性時會被呼叫,

* 它接收乙個引數,表述屬性的名字。

*@param $name

*@return string

*/public function __unset($name)

/*** __tostring()在我們將物件當作字串一樣使用時會被呼叫,

* 它不接收任何引數。該方法允許我們定義物件的表現形式。**如下:

*@return string

*/public function __tostring()

/*** 靜態魔術方法__set_state(),在我們使用var_export()函式輸出物件時會呼叫該方法。

*@param $an_array

*@return string

*/static function __set_state($an_array)

/*** 轉殖物件

* 預設的,物件都是按引用傳值的。因此,在將乙個物件賦值給另乙個變數時,只是建立了指向該物件的乙個引用,並沒有複製該物件。

* 為了實現真正得複製乙個物件,我們需要使用clone關鍵字。這種「按引用傳遞」的策略同樣適用於包含在物件內部的物件。

* 即使我們轉殖了乙個物件,在物件內部的任何物件都不會被轉殖,因此最終的結果是兩個物件共享了同乙個內部物件。

*//** * 對乙個物件使用clone關鍵字時,該魔術方法會被呼叫。在這個魔術方法裡,我們可以實現任何子物件的轉殖,

*@return string

*/function __clone()

/*** 物件序列化

* 序列化是講任意資料轉換為字串格式的過程。序列化通常用來將整個物件存入資料庫或寫入檔案中。

* 當反序列化儲存的資料時,我們可以得到序列化之前的物件。但是,並不是所有得資料都可以被序列化,比如資料庫連線。

* 幸運的是,有乙個魔術方法可以幫我們解決這個問題。

*//** * 魔術方法__sleep()在對乙個物件序列化時(呼叫serialize())會被呼叫。

* 它不接收任何引數,而且應該返回乙個包含所有應該被序列化的屬性的陣列。

* 在該魔術方法中,也可以執行一些其他操作。

* 有一點要注意的是,不要再該函式中進行任何的析構操作,因為這可能會影響正在執行的物件。

*/function __sleep()

/*** 魔術方法__wakeup()在對儲存的物件反序列化時會被呼叫。它不接收任何引數,也沒有任何返回值。

* 可以用它來處理在序列化時丟失的資料庫連線或資源。

*/function __wakeup()

/*** 魔術方法__call()在呼叫不存在或不可訪問的方法時會被呼叫。

* 它接收兩個引數,乙個是呼叫的方法的名字,乙個是包含函式引數的陣列。

* 我們可以使用這種方法呼叫子物件中得同名函式。

* call_user_func_array(),這個函式允許我們動態呼叫乙個命名的函式

*@param $name

*@param $arguments

*@return mixed

*/function __call($name, $arguments)

// return null;

}/**

* 魔術方法__callstatic()與__call()的功能一樣,

* 唯一不同的是,該方法在嘗試訪問乙個不存在或不可訪問的靜態方法時會被呼叫。

*@param $name

*@param $arguments

*/public

static function __callstatic($name, $arguments)

/*** 魔術方法__invoke()在嘗試將物件作為函式使用時會被呼叫。

* 在該方法中定義的任何引數,都將被作為函式的引數。

* 由於引數的位置性,感覺$data可設定為陣列

*@param $data

*/function __invoke($data) else var_dump($data);

}/**

* __debuginfo() 是php5.6增加的特性,var_dump()乙個類時的回應

* 返回乙個包含物件屬性的陣列,未返回的屬性將不會顯示**/

public function __debuginfo()

}/**

* 自動載入/自動載入類檔案

* __autoload()方法並不是乙個魔術方法,但是這個方法非常有用。

* 但是,隨著php版本的更新,該函式已經不建議使用,取而代之的是spl_auto_register()函式

*/public function __autoload($class_name)

function getall($name, $age)

function getv()

}$object = new magicfunction();

//var_export()函式用來將php變數轉換為php**,它接收乙個包含物件屬性值的關聯陣列作為引數。

//var_export($object);

//$model = serialize($object);

//$x = unserialize($model);

//var_dump($x);

//echo "

";//$x(['wori','nidaye','21']);

//$x->all('wori','nidaye');

//var_dump($x);

//echo $x->name;

//echo "

";

php魔術常量,魔術方法

魔術常量 1。line 返回檔案中的當前行號。2。file 返回檔案的完整路徑和檔名。如果用在包含檔案中,則返回包含檔名。自php4.0.2 起,file 總是包含乙個絕對路徑,而在此之前的版本有時會包含乙個相對路徑。3。function 返回函式名稱 php4.3.0 新加 自php5 起本常量返...

invoke 魔術 PHP 魔術方法

php 魔術方法 構造方法 construct 析構方法 destruct get 與 set unset call 和 callstatic sleep 和 wakeup clone tostring invoke set state debuginfo construct 這個方法應該是最常用的...

php魔術方法

php5魔術方法 魔術函式 1。construct 建構函式 例項化物件時被呼叫,當 construct和以類名為函式名的建構函式同時存在時,construct將被呼叫,另乙個不被呼叫。2。destruct 析構函式 當刪除乙個物件或物件操作終止時被呼叫 程式結束後物件就摧毀 永遠都是最後執行的。3...