为什么这些PHP函数不需要全局$ var?

时间:2016-06-16 07:57:56

标签: php php-5.5

我有一个PHP系统,它没有在函数中使用global $var;定义变量的全局范围,而是在服务器上工作,但不在我的本地系统上。

这是PHP范围规则的变化还是有允许这样的设置?我的本地系统正在运行php 5.5.36,我不知道服务器正在运行什么版本。

编辑:添加代码示例

这适用于服务器

include_once("common.inc.php"); // this defines $physical_path

class Admin extends AdminData
{
    function Admin($admin_auth_id='') {
        include_once($physical_path['DB_Access']. 'SubadminCommittee.php');
        // many more lines of code follow
    }
}

这适用于运行5.5.36的本地PHP

include_once("common.inc.php"); // this defines $physical_path

class Admin extends AdminData
{
    function Admin($admin_auth_id='') {
        global $physical_path;  // why is this line not needed on server?
        include_once($physical_path['DB_Access']. 'SubadminCommittee.php');
        // many more lines of code follow
    }
}

1 个答案:

答案 0 :(得分:1)

变量$physical_path 在没有global的函数内可用。这不是PHP版本或任何类型的差异,它是一个明显的范围事实,它在PHP版本之间没有区别。

可能的解释是$physical_path['DB_Access']评估为null并引发警告,您忽略该警告。因此include_once行评估为:

include_once('SubadminCommittee.php');

由于脚本的调用方式以及当前工作目录的内容,此相对路径查找在服务器上有效。在本地服务器上,这不起作用,因为您的工作目录不同和/或PHP的PATH值设置不同。