PHP_魔術函數、魔術常量、預約義常量(經常使用)

PHP魔術函數、魔術常量、預約義常量

1、魔術函數(13個)

一、__construct()  
實例化對象時被調用, 當__construct和以類名爲函數名的函數同時存在時,__construct將被調用,另外一個不被調用。  

二、__destruct()  
當刪除一個對象或對象操做終止時被調用。  

三、__call()  
對象調用某個方法, 若方法存在,則直接調用;若不存在,則會去調用__call函數。  

四、__get()  
讀取一個對象的屬性時,若屬性存在,則直接返回屬性值; 若不存在,則會調用__get函數。  

五、__set()  
設置一個對象的屬性時, 若屬性存在,則直接賦值;  
若不存在,則會調用__set函數。  

六、__toString()  
打印一個對象的時被調用。如echo $obj;或print $obj;  

七、__clone()  
克隆對象時被調用。如:$t=new Test();$t1=clone $t;  

八、__sleep()  
serialize以前被調用。若對象比較大,想刪減一點東東再序列化,可考慮一下此函數。  

九、__wakeup()  
unserialize時被調用,作些對象的初始化工做。  

十、__isset()  
檢測一個對象的屬性是否存在時被調用。如:isset($c->name)。  

十一、__unset()  
unset一個對象的屬性時被調用。如:unset($c->name)。  

十二、__set_state()  
調用var_export時,被調用。用__set_state的返回值作爲var_export的返回值。  

1三、__autoload()  
實例化一個對象時,若是對應的類不存在,則該方法被調用。
 
舉例說明
一、__get() 當試圖讀取一個並不存在的屬性的時候被調用。

若是試圖讀取一個對象並不存在的屬性的時候,PHP就會給出錯誤信息。若是在類裏添加__get方法,而且咱們能夠用這個函數實現相似java中反射的各類操做。php

class  Test 

     
public   function  __get( $key
    { 
         
echo   $key   .   "  不存在 "
    } 


$t   =   new  Test(); 
echo   $t -> name; 
就會輸出:name 不存在



二、__set() 當試圖向一個並不存在的屬性寫入值的時候被調用。java

class  Test 

 
   public   function  __set( $key ,  $value
    { 
         
echo   ' '  .  $key   .   " 附值 "  .  $value
    } 


$t   =   new  Test(); 
$t -> name  =   " aninggo "

就會輸出:對 name 附值 aninggo

 

三、__call() 當試圖調用一個對象並不存在的方法時,調用該方法。web

class  Test 

    
public   function  __call( $Key ,   $Args
    { 
         
echo   " 您要調用的 { $Key } 方法不存在。你傳入的參數是: "   .   print_r ( $Args ,   true ); 
    } 


$t   =   new  Test(); 
$t -> getName(aning ,  go);

程序將會輸出:
您要調用的 getName 方法不存在。參數是:Array
(
     [0] => aning
     [1] => go
)

 

四、__toString() 當打印一個對象的時候被調用,這個方法相似於java的toString方法,當咱們直接打印對象的時候回調用這個函數。apache

class  Test 

     
public   function  __toString() 
     { 
         
return   " 打印 Test "
     } 


$t   =   new  Test(); 
echo   $t

運行echo $t;的時候,就會調用$t->__toString();從而程序將會輸出:打印 Test;

api

五、__clone() 當對象被克隆時,被調用。瀏覽器

class  Test 
{ 
     
public   function  __clone() 
     { 
         
echo   " 我被複制了! "
     }
}

$t   =   new  Test(); 
$t1   =   clone   $t ;

程序輸出:我被複制了!


2、魔術常量(8個)

一、__LINE__  
返回文件中的當前行號。

二、__FILE__  
返回文件的完整路徑和文件名。若是用在包含文件中,則返回包含文件名。自 PHP 4.0.2 起,__FILE__ 老是包含一個絕對路徑,而在此以前的版本有時會包含一個相對路徑。
 
三、__DIR__
文件所在的目錄。若是用在被包括文件中,則返回被包括的文件所在的目錄。它等價於 dirname(__FILE__)。除非是根目錄,不然目錄中名不包括末尾的斜槓。(PHP 5.3.0中新增)

四、__FUNCTION__
返回函數名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該函數被定義時的名字(區分大小寫)。在 PHP 4 中該值老是小寫字母的。

五、__CLASS__
返回類的名稱(PHP 4.3.0 新加)。自 PHP 5 起本常量返回該類被定義時的名字(區分大小寫)。在 PHP 4 中該值老是小寫字母的。
 
六、__TRAIT__
Trait 的名字(PHP 5.4.0 新加)。自 PHP 5.4 起此常量返回 trait 被定義時的名字(區分大小寫)。Trait 名包括其被聲明的做用區域(例如 Foo\Bar)。

七、__METHOD__
返回類的方法名(PHP 5.0.0 新加)。返回該方法被定義時的名字(區分大小寫)。 格式:類名::方法名
 
八、__NAMESPACE__
當前命名空間的名稱(區分大小寫)。此常量是在編譯時定義的(PHP 5.3.0 新增)
 
 
3、預約義常量

PHP_VERSION                    PHP 程序的版本,如4.0.2
PHP_OS                             執行PHP解釋器的操做系統名稱,如Windows
PHP_SAPI                          用來判斷是使用命令行仍是瀏覽器執行的,若是 PHP_SAPI=='cli' 表示是在命令行下執行

E_ERROR                          最近的錯誤處
E_WARNING                      最近的警告處
E_PARSE                           剖析語法有潛在問題處
E_NOTICE                         發生不尋常但不必定是錯誤處

PHP_EOL                           系統換行符,Windows是(\r\n),Linux是(/n),MAC是(\r),自 PHP 4.3.10 和 PHP 5.0.2 起可用
DIRECTORY_SEPARATOR   系統目錄分隔符,Windows是反斜線(\),Linux是斜線(/)
PATH_SEPARATOR             多路徑間分隔符,Windows是反斜線(;),Linux是斜線(:)

PHP_INT_MAX                    INT最大值,32位平臺時值爲2147483647,自 PHP 4.4.0 和 PHP 5.0.5 起可用
PHP_INT_SIZE                   INT字長,32位平臺時值爲4(4字節),自 PHP 4.4.0 和 PHP 5.0.5 起可用服務器

 

 4、PHP運行環境檢測函數php_sapi_name()

該函數返回一個描述PHP與WEB服務器接口的小寫字符串。

返回描述 PHP 所使用的接口類型(the Server API, SAPI)的小寫字符串。
例如,CLI 的 PHP 下這個字符串會是 "cli",Apache 下可能會有幾個不一樣的值,取決於具體使用的 SAPI。
如下列出了可能的值:
aolserver、apache、 apache2filter、apache2handler、 caudium、cgi (直到 PHP 5.3), cgi-fcgi、cli、 continuity、embed、 isapi、litespeed、 milter、nsapi、 phttpd、pi3web、roxen、 thttpd、tux 和 webjames。

SAPI: 服務器端API,貌似和CGI是一個東西。每一個服務器提供的API可能不一樣,可是他們都提供了CGI。
        因此能夠理解CGI是每一個服務器都應該有的SAPI。apache有本身的SAPI,IIS也有本身的。可是php能在這些不一樣的服務器端工做,由於php支持了它們各自的SAPI。
PHP-CLI: php命令行接口,php能夠工做在這種模式下也能夠CGI模式。是SAPI的一種,它和CGI提供的功能差很少。函數

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息