mysql 魔術設定 PHP魔術方法(附帶例項)

2021-10-20 22:39:18 字數 2670 閱讀 4289

在物件導向程式設計中,php 提供了一系列的魔術方法,這些魔術方法為程式設計提供了很多便利,在 php 中的作用是非常重要的。php 中的魔術方法通常以__(兩個下劃線)開始,並且不需要顯式的呼叫而是在某種特定條件下自動呼叫的。

前面我們介紹的建構函式 __construct 和析構函式 __destruct 就屬於 php 中的魔術方法。php 中的魔術方法如下表所示:

魔術方法

作用__construct()

例項化類時自動呼叫

__destruct()

類物件使用結束時自動呼叫

__set()

在給未定義的屬性賦值時自動呼叫

__get()

呼叫未定義的屬性時自動呼叫

__isset()

使用 isset() 或 empty() 函式時自動呼叫

__unset()

使用 unset() 時自動呼叫

__sleep()

使用 serialize 序列化時自動呼叫

__wakeup()

使用 unserialize 反序列化時自動呼叫

__call()

呼叫乙個不存在的方法時自動呼叫

__callstatic()

呼叫乙個不存在的靜態方法時自動呼叫

__tostring()

把物件轉換成字串時自動呼叫

__invoke()

當嘗試把物件當方法呼叫時自動呼叫

__set_state()

當使用 var_export() 函式時自動呼叫,接受乙個陣列引數

__clone()

當使用 clone 複製乙個物件時自動呼叫

__debuginfo()

使用 var_dump() 列印物件資訊時自動呼叫

前面我們已經介紹過了《建構函式》和《析構函式》,下面我們再來介紹幾個常用的魔術方法。

1、__set() 方法

在為當前環境下未定義或不可見的類屬性賦值時,會自動呼叫 __set() 方法。定義該方法的語法格式如下:

public function __set($key, $value)elseelseelse{

echo '成員屬性:「'.$name.'」不存在!

';$object = new website();

unset($object->url);

unset($object->name);

unset($object->abc);

執行結果如下:

移除成員屬性:「name」成功!

成員屬性:「abc」不存在!

5、__call() 方法

當呼叫類中乙個不可訪問或不存在的方法時,__call() 方法會被呼叫。該方法的語法格式如下:

public function __call($name, $arguments){

其中,$name 為要呼叫的方法名稱,$arguments 為傳遞給 $name 的引數所組成的陣列。

當呼叫的方法不存在時會自動呼叫 __call() 方法,程式會繼續執行下去,從而可以避免當呼叫方法不存在時產生錯誤所導致的程式終止。

【示例】下面使用簡單的示例來演示一下 __call() 方法的使用。

class website{

public function say(){

echo 'welcome c語言中文網!

';public function __call($name, $arguments){

echo '你所呼叫的方法:'.$name;

if(!empty($arguments)){

echo '【以及引數:';

print_r($arguments);

echo '】';

echo ' 不存在!

';$obj = new website();

$obj -> say();

$obj -> url('');

$obj -> title();

執行結果如下:

welcome c語言中文網!

你所呼叫的方法:url【以及引數:array ( [0] => ) 】 不存在!

你所呼叫的方法:title 不存在!

6、__clone() 方法

可以使用 clone 關鍵字複製物件,當複製完成時,如果定義了 __clone() 方法,則新建立的物件(複製生成的物件)中的 __clone() 方法會被自動呼叫,通過該方法我們可以做一些必要的操作。__clone() 方法的語法格式如下:

public function __clone(){

該函式不需要傳入引數。

【示例】下面使用簡單的示例來演示一下 __clone() 方法的使用。

class website{

public function say(){

echo 'welcome c語言中文網!

';public function __clone(){

echo '物件轉殖成功

';$obj = new website();

$obj2 = clone $obj;

echo '

';
var_dump($obj, $obj2);

執行結果如下:

物件轉殖成功

object(website)#1 (0) {

object(website)#2 (0) {

魔術方法 python python的魔術方法

什麼叫魔術方法 在python中定義以雙下劃線開頭,有一些python自定義的函式,並且以雙下劃線為結尾的函式叫做魔法函式 classcompany object def init self,employee list self.employee employee listdef getitem s...

python魔術方法call php魔術方法

call是魔術方法中的乙個,當程式呼叫到當前類中未宣告或沒許可權呼叫的方法時,就會呼叫 call方法 class test public function emptyfunc getargs func get args funcname getargs 0 params array slice ge...

php魔術常量,魔術方法

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