PHP:include包含文件局部引入全局變量失效的作用域問題

假設現有A B C三個PHP文件,B和C調用A,其中A.php的代碼爲:

<?php
/* 定義file:A.php, 假設當前目錄爲根目錄 */
    // 定義全局變量: globalVariableA
    $globalVariableA="This is a global variable";
    
    // 1)顯示globalVariableA的值
    echo "A) The value of global variable A in A.php is $globalVariableA;<br/>";
?>

B.php的代碼爲:

<?php
/* 定義file: B.php,假設當前目錄爲根目錄 */

// 包含A.php
include "A.php";

// 定義函數ShowV()
function ShowV($p){
    // 2)顯示globalVariableA的值
    echo ($p ? "B)" : "C)") . " The value of global variable A in A.php is " . ($globalVariableA == NULL ? "NULL" : $globalVariableA) . "<br/>";
}

ShowV(1);
?>

C.php爲調用過程代碼爲:

<?php
/* file: C.php */
// 包含B.php
include "B.php";

ShowV(0);
?>

結果爲:

A.php runtime
A.php runtime

 

B.php runtime
B.php runtime

 

C.php runtime
C.php runtime

 

由此可見,include文件的全局變量作用域僅在當前文件(也即網頁頁面)。註釋:這裏的global變量是指編程語言的全局,並非是cgi server容器的global變量值。所以我們在使用特定頁面使用指定變量的時候,默認狀態下在其他頁面被包含的情況下是無法調用該變量的值。在一方面來說,這是封裝,泄露機制和安全保護。另一方面來說這也是一種限制,對“自由發揮”的限制。雖然Internet互聯網潛在對web server服務器和用戶的隱私和財產安全諸多威脅,但這並不妨礙開發者developer對web的擴展和用戶對其的意識延申。這兩者並不衝突矛盾。

那麼,作爲開發者的我們,該如何突破無視這種限制和阻礙?

其實,如果我們學習過規範的、基礎的編程知識就沒有問題了。中國有句古話:授人與魚不如授人與漁。跳躍式發展不利於未來的提升。忽視基礎(設施)的完善無異於飲鳩止渴。鑽牛角尖很可能是掘頭路一條。(當然鑽穿了就是開拓者)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章