生活随笔
收集整理的這篇文章主要介紹了
php __FILE__,__CLASS__等魔术变量,及实例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
php __FILE__,__CLASS__等魔術變量,及實例
今天看到一個魔術變量,是以前沒見過的,__DIR__,我查了查,發現原來是php5.3新增的,順便舉幾個例子,解釋一下php的魔術變量
1,__FILE__
文件的完整路徑和文件名。如果用在被包含文件中,則返回被包含的文件名。自 PHP 4.0.2 起,__FILE__ 總是包含一個絕對路徑(如果是符號連接,則是解析后的絕對路徑),而在此之前的版本有時會包含一個相對路徑。
這個變量,我用的是最多的,估計也是大家用的最多的。
web服務器都會指定一個documentroot的,但是不同的服務器,設置的documentroot有可能是不同的,在這種情況下,把一個網站從一個服務器搬家到另一個服務器,這樣就有可能因為路徑的不同,造成網站跑不起來。
<?php??define('ROOT_PATH',?dirname(__FILE__)?.?DIRECTORY_SEPARATOR);??echo?ROOT_PATH;??echo?"<br>";??echo?__FILE__;??echo?"<br>";??echo?dirname(__FILE__);??echo?"<br>";??echo?dirname(dirname(__FILE__));???>?? 2,__LINE__
文件中的當前行號。這個變量在調試錯誤的時候,還是比較有作用的,其他的時候,沒什么用處,純屬個人觀點。
<?php??echo?__LINE__;???>?? 3,__CLASS__
類的名稱,PHP5返回的結果是區分大小寫的
<?php??class?base_class??{???function?say_a()???{???echo?"'a'?-?said?the?"?.?__CLASS__?.?"<br/>";???}???function?say_b()???{???echo?"'b'?-?said?the?"?.?get_class($this)?.?"<br/>";???}??}????class?derived_class?extends?base_class??{???function?say_a()???{???parent::say_a();???echo?"'a'?-?said?the?"?.?__CLASS__?.?"<br/>";???}???function?say_b()???{???parent::say_b();???echo?"'b'?-?said?the?"?.?get_class($this)?.?"<br/>";???}??}????$obj_b?=?new?derived_class();??$obj_b->say_a();??echo?"<br/>";??$obj_b->say_b();???>??結果為:??'a'?-?said?the?base_class??'a'?-?said?the?derived_class????'b'?-?said?the??derived_class??'b'?-?said?the?derived_class?? 有的時候,我們可以用get_class來代替__CLASS__
4,__FUNCTION__和__METHOD__
__FUNCTION__:函數名稱,php5中返回的結果是區分大小寫的
__METHOD__:方法中的函數名稱,php5中返回的結果是區分大小寫的
二個都是取得方法的名稱,有什么不同呢?
<?php??class?test??{???function?a()???{???echo?__FUNCTION__;???echo?"<br>";???echo?__METHOD__;???}??}????function?good?(){???echo?__FUNCTION__;???echo?"<br>";???echo?__METHOD__;??}????$test?=?new?test();??$test->a();??echo?"<br>";??good();???>??返回結果:??a??test::a??good??good?? 相對于孤立的函數來說,二個都可以取出函數名,沒什么區別,如果是class中的方法時,__FUNCTION__只能取出class的方法名,而__METHOD__不光能取出方法名,還能取出class名
5,__DIR__
文件所在的目錄。如果用在被包括文件中,則返回被包括的文件所在的目錄。它等價于 dirname(__FILE__)。除非是根目錄,否則目錄中名不包括末尾的斜杠。(PHP 5.3.0中新增)
如果在5.3以前的版本中想用__DIR__的話,可以這樣
<?php??if(!defined('__DIR__'))?{???$iPos?=?strrpos(__FILE__,?"/");???define("__DIR__",?substr(__FILE__,?0,?$iPos)?.?"/");??}???>?? 6,__NAMESPACE__
當前命名空間的名稱(大小寫敏感)。這個常量是在編譯時定義的(PHP 5.3.0 新增)
7,__STATIC__
當你調用class的靜態方法時,返回class名稱,區分大小寫。如果在繼承中調用的話,不管在繼承中有沒有定義,都能返回繼承的class名。
<?php??class?Model??{???public?static?function?find()???{???echo?__STATIC__;???}??}????class?Product?extends?Model?{}??class?User?extends?Model?{}????Product::find();?User::find();??>?
轉載于:https://www.cnblogs.com/gaogaoxingxing/p/7691521.html
總結
以上是生活随笔為你收集整理的php __FILE__,__CLASS__等魔术变量,及实例的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。