魔術變數
1.__file__
當前執行檔案的完整路徑和檔名。如果用在被包含檔案中,則返回被包含的檔名。
魔術方法
1.__sleep()和__weekup():執行serialize()前呼叫類裡的__sleep()方法,並返回陣列(去掉不必要的屬性),
執行unserialize()前呼叫__wakeup()方法,並返回序列化後需要增加的屬性。
用法:下面例子顯示了如何用__sleep和 __wakeup方法來序列化乙個物件. id屬性是乙個不打算保留在物件中的臨時屬性. __sleep方法保證在序列化的物件中不包含id屬性. 當反序列化乙個user物件,__wakeup方法建立id屬性的新值. 這個例子被設計成自我保持. 在實際開發中,你可能發現包含資源(如影象或資料流)的物件需要這些方法。
<?phpclass
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().
<?phpclass
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)3.__autoload();自動載入類,必須每次都include類檔案。 自動載入不可用於 php 的 cli 互動模式。["count"]=>
int(0)
}object(p)#3 (2)
["count"]=>
int(0)
}
說明:該魔術方法試圖使用尚未被定義的類時自動呼叫。通過呼叫此函式,指令碼引擎在 php 出錯失敗前有了最後乙個機會載入所需的類。
檔案1:1.php
<?phpfunction __autoload($class
)$animal = new
animal();
?>
檔案2:animal.php (檔名必須和該類名一致)
<?phpclass
animal
}?>
spl_autoload_register() 提供了一種更加靈活的方式來實現類的自動載入。因此,不再建議使用 __autoload() 函式,在以後的版本中它可能被棄用。
<?php/*** $class : 不用給該變數賦值,因為在new這個物件的時候,
* 會被自動填充進去。 */
if(!function_exists('classautoloader'))
}$r = spl_autoload_register('classautoloader');
var_dump($r
);$a = new
animal();
?>
匿名函式:
<?phpspl_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...