PHP魔術變數和魔術方法

2021-09-06 11:21:07 字數 2423 閱讀 1696

魔術變數

1.__file__

當前執行檔案的完整路徑和檔名。如果用在被包含檔案中,則返回被包含的檔名。

魔術方法

1.__sleep()和__weekup():執行serialize()前呼叫類裡的__sleep()方法,並返回陣列(去掉不必要的屬性),

執行unserialize()前呼叫__wakeup()方法,並返回序列化後需要增加的屬性。

用法:下面例子顯示了如何用__sleep和 __wakeup方法來序列化乙個物件. id屬性是乙個不打算保留在物件中的臨時屬性. __sleep方法保證在序列化的物件中不包含id屬性. 當反序列化乙個user物件,__wakeup方法建立id屬性的新值. 這個例子被設計成自我保持. 在實際開發中,你可能發現包含資源(如影象或資料流)的物件需要這些方法。

<?php 

class

user

function __sleep()

function

__wakeup()

}$u = new

user();

$u->name = "leo";

$s = serialize($u); //

serialize序列化物件u,此處不序列化id屬性,id值被拋棄

$u2 = unserialize($s); //

unserialize反序列化,id值被重新賦值

//物件u和u2有不同的id賦值

echo "";

print_r($u

);print_r($s);//

直接沒有id

print_r($u2

);//

echo "";print_r(spl_);

?>

輸出:user object

([name] => leo

[id] => 5538a94e581cc

)o:4:"user":1:user object

([name] => leo

[id] => 5538a94e581fe

)2.__clone():執行乙個前拷貝,基本型別屬性傳值,物件型別屬性傳引用。故如果物件型別也要傳值,則在類中增加__clone().

<?php

class

balance

}class p extends

balance

function

__clone()

}$p = new p(new balance(300));

$p2 = clone$p;

$p2->balence->count = 32;

echo "";var_dump($p,$p2

);?>

輸出:

object(p)#1 (2) 

["count"]=>

int(0)

}object(p)#3 (2)

["count"]=>

int(0)

}

3.__autoload();自動載入類,必須每次都include類檔案。  自動載入不可用於 php 的 cli 互動模式。

說明:該魔術方法試圖使用尚未被定義的類時自動呼叫。通過呼叫此函式,指令碼引擎在 php 出錯失敗前有了最後乙個機會載入所需的類。

檔案1:1.php

<?php

function __autoload($class

)$animal = new

animal();

?>

檔案2:animal.php (檔名必須和該類名一致)

<?php

class

animal

}?>

spl_autoload_register() 提供了一種更加靈活的方式來實現類的自動載入。因此,不再建議使用 __autoload() 函式,在以後的版本中它可能被棄用。

<?php/**

* $class : 不用給該變數賦值,因為在new這個物件的時候,

* 會被自動填充進去。 */

if(!function_exists('classautoloader'))

}$r = spl_autoload_register('classautoloader');

var_dump($r

);$a = new

animal();

?>

匿名函式:

<?php

spl_autoload_register(

function ($class));

$p = new

animal();

?>

PHP魔術方法和魔術變數

construct 類的建構函式 destruct 類的析構函式 call 在物件中呼叫乙個不可訪問方法時呼叫 callstatic 用靜態方式中呼叫乙個不可訪問方法時呼叫 get 獲得乙個類的成員變數時呼叫 set 設定乙個類的成員變數時呼叫 isset 當對不可訪問屬性呼叫isset 或empt...

PHP魔術方法和魔術常量

具體的解釋如下 1。construct 例項化物件時被呼叫,當 construct和以類名為函式名的函式同時存在時,construct將被呼叫,另乙個不被呼叫。2。destruct 當刪除乙個物件或物件操作終止時被呼叫。3。call 物件呼叫某個方法,若方法存在,則直接呼叫 若不存在,則會去呼叫 c...

PHP魔術方法和魔術常量

具體的解釋如下 1。construct 例項化物件時被呼叫,當 construct和以類名為函式名的函式同時存在時,construct將被呼叫,另乙個不被呼叫。2。destruct 當刪除乙個物件或物件操作終止時被呼叫。3。call 物件呼叫某個方法,若方法存在,則直接呼叫 若不存在,則會去呼叫 c...