魔術函式
1、__construct()
例項化物件時被呼叫。
當__construct和以類名為函式名的函式同時存在時,__construct將被呼叫,另乙個不被呼叫。
2、__destruct()
當刪除乙個物件或物件操作終止時被呼叫。
3、__call()
物件呼叫某個方法。
若方法存在,則直接呼叫。
若不存在,則會去呼叫__call函式。
4、__get()
讀取乙個物件的屬性時。
若屬性存在,則直接返回屬性值。
若不存在,則會呼叫__get函式。
5、__set()
設定乙個物件的屬性時。
若屬性存在,則直接賦值。
若不存在,則會呼叫__set函式。
6、__tostring()
列印乙個物件的時被呼叫。如echo $obj;或print $obj;
注意:這時候php會丟擲乙個catchable fatal error錯誤,還有一點要注意,用print_r列印物件不會觸發此函式
7。__clone()
轉殖物件時被呼叫。如:$t=new test();$t1=clone $t;
8、__sleep()
serialize之前被呼叫。若物件比較大,想刪減一點東東再序列化,可考慮一下此函式。
9、__wakeup()
unserialize時被呼叫,做些物件的初始化工作。
10、__isset()
檢測乙個物件的屬性是否存在時被呼叫。如:isset($c->name)。
如果name不存在,則觸發該函式
11、__unset()
unset乙個物件的屬性時被呼叫。如:unset($c->name)。
如果name不存在,則觸發該函式
12。__set_state()
呼叫var_export時,被呼叫。用__set_state的返回值做為var_export的返回值。
13、__autoload()
這個函式比較特殊,這個函式並不是作為類的成員方法是用的。
例項化乙個物件時,如果對應的類不存在,則該方法被呼叫。
可以用spl_autoload_register函式來定義其他的函式來代替__autoload
魔術常量
1、__line__
返回檔案中的當前行號。
2、__file__
返回檔案的完整路徑和檔名。如果用在包含檔案中,則返回包含檔名。自 php 4.0.2 起,__file__ 總是包含乙個絕對路徑,而在此之前的版本有時會包含乙個相對路徑。
3、__function__
返回函式名稱(php 4.3.0 新加)。自 php 5 起本常量返回該函式被定義時的名字(區分大小寫)。在 php 4 中該值總是小寫字母的。
4、__class__
返回類的名稱(php 4.3.0 新加)。自 php 5 起本常量返回該類被定義時的名字(區分大小寫)。在 php 4 中該值總是小寫字母的。
5、__method__
返回類的方法名(php 5.0.0 新加)。返回該方法被定義時的名字(區分大小寫)。
測試例子
<?php
class magic
/*** 建構函式
* 在類的初始化的時候我被呼叫
* 當__construct和以類名為函式名的函式同時存在時,__construct將被呼叫,另乙個不被呼叫。
*/public function __construct()
/*** 析構函式
* 當刪除乙個物件或物件操作終止時候呼叫
*/public function __destruct()
/*** 當呼叫物件不存在的方法時,我被觸發
* @param varchar $method 呼叫的方法名
* @param array $args 傳遞的引數
*/public function __call($method, $args)
/*** 讀取乙個物件的屬性時,如果該屬性不存在,我被觸發
* @param varchar $attr 所get的屬性名
*/public function __get($attr)
/*** 設定乙個物件的屬性的值的時候,若屬性存在,直接賦值,若不存在,我被觸發
* @param varchar $attr 所set的變數名
* @param $value 所set的變數值
*/public function __set($attr, $value)
/*** 列印乙個物件時,我被呼叫
* 注意:這時候php會丟擲乙個catchable fatal error錯誤,還有一點要注意,用print_r列印物件不會觸發此函式
*/public function __tostring()
/*** 物件被轉殖的時候呼叫我
*/public function __clone()
/*** 物件在serialize之前被呼叫。若物件比較大,想刪減一點東東再序列化,可考慮一下此函式。
*/public function __sleep()
/*** unserialize時被呼叫,做些物件的初始化工作。
*/public function __wakeup()
/*** 檢測乙個物件的屬性是否存在時被呼叫
* 如果屬性存在,不呼叫
* 如果不存在,呼叫
* @param varchar $attr 檢測的物件的名稱
*/public function __isset($attr)
/*** unset乙個物件的屬性時被呼叫
*/public function __unset($attr)
/*** 呼叫var_export時,被呼叫。用__set_state的返回值做為var_export的返回值。
*/public function __set_state() }
// test __construct
$magic = new magic;
// __construct 被觸發,輸出__construct
// test __call
$magic->haha(1,2,3);
// __call 被觸發
// 輸出 haha be called with args:array ( [0] => 1 [1] => 2 [2] => 3 )
// test __get
$magic->a;
$magic->b;
// 輸出 b has been get!
// test __set
$magic->b = array(1,2,3);
// 輸出 b has been to value:123
// test __tostring
//print $magic; // 測試時請去掉注釋
// 輸出 __tosting
// 同時給出乙個報錯:catchable fatal error: method magic::__tostring() must return a string value in e:\eclipse\workspace\test\magic_test.php on line 87
// test __clone
//$new_magin = clone $magic;
// 輸出 __clone
// test __isset
isset($magic->a);
// 無輸出
isset($magic->b);
// b is checked by isset function
// test __unset
unset($magic->a);
// 無輸出
unset($magic->b);
// 輸出 b has been unset
echo '
';function __autoload($class_name)
$test_auto = new test_auto;
// 輸出 __autoload
PHP魔術常量 魔術函式
1 魔術常量 2 line 檔案中的當前行號 包含注釋行 3 file 檔案的完整路徑和檔名 4 function 當前所在的函式名稱 php 4.3.0 新增 5 class 當前所在的類的名稱 php 4.3.0 新增 6 method 當前所在的類的方法名 php 5.0.0 新增 7 核心預...
php的魔術函式和魔術常量
1。construct 例項化物件時被呼叫,當 construct和以類名為函式名的函式同時存在時,construct將被呼叫,另乙個不被呼叫。2。destruct 當刪除乙個物件或物件操作終止時被呼叫。3。call 物件呼叫某個方法,若方法存在,則直接呼叫 若不存在,則會去呼叫 call函式。4。...
PHP魔術方法和魔術常量
具體的解釋如下 1。construct 例項化物件時被呼叫,當 construct和以類名為函式名的函式同時存在時,construct將被呼叫,另乙個不被呼叫。2。destruct 當刪除乙個物件或物件操作終止時被呼叫。3。call 物件呼叫某個方法,若方法存在,則直接呼叫 若不存在,則會去呼叫 c...