[複習|驗證|更新貼]
要點:(6)
1. php中有7個魔術常量:__line__, __file__, __dir__, __function__, __class__, __method__, __namespace__
2. 特殊常量不區分大小寫
3. 其值隨著它們在**中的位置改變而改變
4. 如果使用了名字空間,那麼顯示__funcion__,__class__,__method__時,前面會新增名字空間
5. __file__ = dirname(__dir__)
6. __line__, __file__, __dir__ 都和當前被包含指令碼有關,而不是和包含指令碼有關
驗證:
目錄結構
/hw006
|--a.php
|--b.php
在a.php中包含了b.php
a.php**如下:
<?php
namespace hw006a; //defined a namespace
//in a.php, deliberately use the "pure lowcase" and "mixture of lowcase and uppercase" ways
echo "__file__:", __file__, "
"; echo "__line__:", __line__, "
"; //5
echo "__dir__:", __dir__, "
"; echo "__namespce__", __namespace__, "";
function testfunc()
testfunc();
class testclass
} new testclass();
/*require b.php*/
echo "";
require 'b.php';
?>
b.php**如下
<?php
namespace hw006b; //defined a namespace
echo "__file__:", __file__, "
"; echo "__line__:", __line__, "
"; //5
echo "__dir__:", __dir__, "
"; echo "__namespce__", __namespace__, "";
function testfunc()
testfunc();
class testclass
} new testclass();
?>
訪問b.php結果如下:
圖1-1
訪問a.php結果如下:
圖1-2
在a.php中,我使用了名字空間hw006a, 並且故意使用了魔術常量的小寫模式、大小寫混合模式。從圖1-1的結果來看,驗證了要點2,4的正確性
另外圖1-1水平分割線以下的部分和圖1-2驗證了要點3,6的正確性
應用:
#1 魔術常量__file__或__dir__ 結合$globals , directory_separator
以及函式define(),explode()等等
可以總結出一套可復用的基於絕對路徑的php檔案包含機制(待完成[探索|**復用貼])
#2 魔術常量 __function__可以在遞迴函式中使用,以防止此遞迴函式改名時,修改大量**。
[changelogs]
2015/01/03 建立此貼,總結出魔術常量比較實用的6大要點,使用乙個簡單的示例驗證了魔術常量的作用
PHP魔術常量
php 向它執行的任何指令碼提供了大量的預定義常量。不過很多常量都是由不同的擴充套件庫定義的,只有在載入了這些擴充套件庫時才會出現,或者動態載入後,或者在編譯時已經包括進去了。有五個魔術常量根據它們使用的位置而改變。例如 line 的值就依賴於它在指令碼中所處的行來決定。這些特殊的常量不區分大小寫,...
PHP魔術常量
php 向它執行的任何指令碼提供了大量的預定義常量。不過很多常量都是由不同的擴充套件庫定義的,只有在載入了這些擴充套件庫時才會出現,或者動態載入後,或者在編譯時已經包括進去了。有七個魔術常量它們的值隨著它們在 中的位置改變而改變。例如 line 的值就依賴於它在指令碼中所處的行來決定。這些特殊的常量...
PHP 魔術常量
今天在菜鳥教程上看見了php魔術常量,覺得挺有意義的分享一下 它的作用是很多常量都是由不同的擴充套件庫定義的,只有在載入了這些擴充套件庫時才會出現,或者動態載入後,或者在編譯時已經包括進去了。有八個魔術常量它們的值隨著它們在 中的位置改變而改變。例如 line 的值就依賴於它在指令碼中所處的行來決定...