1. 程式人生 > >PHP5中魔術方法函式和魔法常量有哪幾個,請舉例說明各自的用法

PHP5中魔術方法函式和魔法常量有哪幾個,請舉例說明各自的用法

魔術函式

1、__construct()
例項化物件時被呼叫,當__construct和以類名為函式名的函式同時存在時,__construct將被呼叫,另一個不被呼叫。

<?php
  


class Test  
{  

public function __construct()  
{  
    echo "__construct <br>";  
} 
public function Test()  
{  
    echo "Test <br>";  
} 

}  
  
$t = new Test();  

輸出:__construct 
如果隱藏__construct函式,則輸出:Test 

 

2、__destruct()
當刪除一個物件或物件操作終止時被呼叫。

當執行die時,__destruct會被呼叫;

 

3、__call()
物件呼叫某個方法,若方法存在,則直接呼叫;若不存在,則會去呼叫__call函式。

<?php
  
class Test  
{  

    public function __call($Key, $Args)  
    {  
        echo "您要呼叫的 {$Key} 方法不存在。你傳入的引數是:" . print_r($Args, true);  
    }  
}  
$t = new Test();   
$t->notExit('ok','go');  
die;

4、__get()
讀取一個物件的屬性時,若屬性存在,則直接返回屬性值;若不存在,則會呼叫__get函式。如果試圖讀取一個物件並不存在的屬性的時候,PHP就會給出錯誤資訊。如果在類裡新增__get方法,並且我們可以用這個函式實現類似java中反射的各種操作。

class Test  
{  

public function __set($key,$value)  
{  
echo '對.$key . '附值'.$value;  
} 
public function __get($key)  
{  
   echo $key . '不存在'; 
}
 
}  
  
$t = new Test();  
$t->name = 'ok';

echo $t->name; 

5、__set()
設定一個物件的屬性時,若屬性存在,則直接賦值;若不存在,則會呼叫__set函式。

6、__toString()
列印一個物件的時被呼叫。如echo $obj;或print $obj;


class Test
{
public function __toString()
{
return “列印 Test”;
}
}
 
$t = new Test();
 
echo $t;

執行echo $t;的時候,就會呼叫$t->__toString();從而輸出
列印 Test

7、__clone()

__clone()
克隆物件時被呼叫。如:$t=new Test();$t1=clone $t;

class Test  
{  
  
public function __clone()  
{  
echo “我被複制了!”;  
}  
}  
  
$t = new Test();  
$t1 = clone $t;  

程式輸出:
我被複制了

8、__sleep() serialize之前被呼叫。若物件比較大,想刪減一點東東再序列化,可考慮一下此函式。

9、__wakeup() unserialize時被呼叫,做些物件的初始化工作。

10、 __isset() 檢測一個物件的屬性是否存在時被呼叫。如:isset($c->name)。

11、__unset() unset一個物件的屬性時被呼叫。如:unset($c->name)。

12、__set_state() 呼叫var_export時,被呼叫。用__set_state的返回值做為var_export的返回值。

13、__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 新加)。返回該方法被定義時的名字(區分大小寫)。