PHP魔術常量探索與總結

2021-06-28 00:08:44 字數 2186 閱讀 1106

[複習|驗證|更新貼]

要點:(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 的值就依賴於它在指令碼中所處的行來決定...