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的扩展和用户对其的意识延申。这两者并不冲突矛盾。

那么,作为开发者的我们,该如何突破无视这种限制和阻碍?

其实,如果我们学习过规范的、基础的编程知识就没有问题了。中国有句古话:授人与鱼不如授人与渔。跳跃式发展不利于未来的提升。忽视基础(设施)的完善无异于饮鸠止渴。钻牛角尖很可能是掘头路一条。(当然钻穿了就是开拓者)

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