本文總結(jié)了PHP 預(yù)定義變量、魔術(shù)常量和魔術(shù)方法。分享給大家供大家參考,具體如下:
PHP 預(yù)定義了一些變量、常量、方法,使用起來(lái)很方便,例如直接使用 __DIR__ 獲取當(dāng)前文件所在的目錄。
下面分別詳細(xì)介紹一下 PHP 的預(yù)定義變量、魔術(shù)常量和魔術(shù)方法
預(yù)定義變量
超全局變量:
超全局變量是在全部作用域中始終可用的內(nèi)置變量,意味這你可以在 PHP 腳本的任意位置直接訪問(wèn)。在函數(shù)或方法中無(wú)需執(zhí)行 global $variable; 就可以訪問(wèn)它們。
超全局變量是從 PHP 4.1.0 開(kāi)始才有的功能。
PHP 的超級(jí)全局變量有:
$GLOBALS,引用全局作用域中可用的全部變量
$_SERVER,服務(wù)器和執(zhí)行環(huán)境信息
$_GET,HTTP GET 變量
$_POST,HTTP POST 變量
$_FILES,HTTP 文件上傳變量
$_COOKIE,HTTP Cookies
$_SESSION,Session 變量
$_REQUEST,HTTP Request 變量
$_ENV,環(huán)境變量
其他:
$php_errormsg,前一個(gè)錯(cuò)誤信息
$HTTP_RAW_POST_DATA,原生 POST 數(shù)據(jù),一般會(huì)使用 php://input 代替 $HTTP_RAW_POST_DATA
$http_response_header,HTTP 響應(yīng)頭
$argc,傳遞給腳本的參數(shù)數(shù)目
$argv,傳遞給腳本的參數(shù)數(shù)組
魔術(shù)常量
PHP 有八個(gè)魔術(shù)常量,它們的值隨著它們?cè)诖a中的位置改變而改變。例如 __LINE__ 的值就依賴(lài)于它在腳本中所處的行來(lái)決定。這些特殊的常量(魔術(shù)常量)不區(qū)分大小寫(xiě),如下:
__LINE__,文件中的當(dāng)前行號(hào)
__FILE__,文件的完整路徑和文件名,如果用在被包含的文件中,則返回被包含的文件名
__DIR__,文件所在的目錄,如果用在被包括文件中,則返回被包括的文件所在的目錄。等價(jià)與 dirname(__FILE__)
__FUNCTION__,函數(shù)的名稱(chēng)
__CLASS__,類(lèi)的名稱(chēng)
__TRAIT__,trait 的名字
__METHOD__,類(lèi)的方法名
__NAMESPACE__,當(dāng)前命名空間的名稱(chēng)
魔術(shù)方法
Magic methods PHP 的魔術(shù)方法,在命名自定義的類(lèi)方法時(shí)不能使用這些方法名,因?yàn)?PHP 已經(jīng)規(guī)定好了這些方法是有特定的功能,例如 __construct() 是構(gòu)造方法。
PHP 將所有以 __(兩個(gè)下劃線)開(kāi)頭的類(lèi)方法保留為魔術(shù)方法。所以在定義類(lèi)方法時(shí),除了魔術(shù)方法,建議不要以 __ 為前綴。
__construct(),構(gòu)造函數(shù)
__destruct(),析構(gòu)函數(shù)
__call(),在對(duì)象中調(diào)用一個(gè)不可訪問(wèn)的方法時(shí),__call() 會(huì)被調(diào)用
__callStatic(),在對(duì)象中調(diào)用一個(gè)不可訪問(wèn)的靜態(tài)方法時(shí),__call() 會(huì)被調(diào)用
__get(),當(dāng)讀取不可訪問(wèn)的屬性值時(shí),__set() 會(huì)被調(diào)用
__set(),當(dāng)給不可訪問(wèn)的屬性賦值時(shí),__set() 會(huì)被調(diào)用
__isset(),當(dāng)對(duì)不可訪問(wèn)屬性調(diào)用 isset() 或 empty() 是,__isset() 會(huì)被調(diào)用
__unset(),當(dāng)對(duì)不可訪問(wèn)屬性調(diào)用 unset() 時(shí),__unset() 會(huì)被調(diào)用
__sleep(),serialize() 函數(shù)會(huì)檢查類(lèi)中是否存在魔術(shù)方法 __sleep(),如果存在,會(huì)先調(diào)用 __sleep(),然后才執(zhí)行序列化操作。這樣就允許對(duì)象在被序列化之前做任何清除操作。
__wakeup(),當(dāng)使用 unserialize() 恢復(fù)對(duì)象時(shí), 將調(diào)用 __wakeup() 成員函數(shù)。
__toString(),當(dāng)一個(gè)對(duì)象被當(dāng)作字符串輸出時(shí),會(huì)調(diào)用 __toString() 輸出的內(nèi)容,例如 echo $obj;
__invoke(),當(dāng)以調(diào)用函數(shù)的方式調(diào)用一個(gè)對(duì)象時(shí),__invoke() 方法會(huì)被自動(dòng)調(diào)用,本特性只在 PHP 5.3.0 及以上版本有效。
__set_state(),當(dāng)調(diào)用 var_export() 導(dǎo)出對(duì)象時(shí),此方法會(huì)被調(diào)用
__clone(),對(duì)象復(fù)制,當(dāng)使用 clone 關(guān)鍵字復(fù)制對(duì)象時(shí),會(huì)調(diào)用 __clone(),__clone() 不能被直接調(diào)用,使用 clone 復(fù)制的對(duì)象為淺復(fù)制,所以引用屬性仍然會(huì)是一個(gè)指向原來(lái)的變量的引用。
__debugInfo(),當(dāng)調(diào)用 var_dump() 導(dǎo)出對(duì)象時(shí),此方法會(huì)被調(diào)用
__autoload($class_name),加載未定義的類(lèi)
官方文檔:
https://www.php.net/manual/zh/reserved.variables.php
https://www.php.net/manual/zh/language.constants.predefined.php
https://www.php.net/manual/zh/language.oop5.magic.php
更多關(guān)于PHP相關(guān)內(nèi)容感興趣的讀者可查看本站專(zhuān)題:《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)教程》、《PHP數(shù)組(Array)操作技巧大全》、《PHP基本語(yǔ)法入門(mén)教程》、《PHP運(yùn)算與運(yùn)算符用法總結(jié)》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門(mén)教程》及《php常見(jiàn)數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家PHP程序設(shè)計(jì)有所幫助。
您可能感興趣的文章:- PHP常量及變量區(qū)別原理詳解
- PHP 判斷常量,變量和函數(shù)是否存在
- PHP之變量、常量學(xué)習(xí)筆記
- 實(shí)例分析php常量和變量的不同