我有一个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
}
}
答案 0 :(得分:1)
变量$physical_path
不 在没有global
的函数内可用。这不是PHP版本或任何类型的差异,它是一个明显的范围事实,它在PHP版本之间没有区别。
可能的解释是$physical_path['DB_Access']
评估为null
并引发警告,您忽略该警告。因此include_once
行评估为:
include_once('SubadminCommittee.php');
由于脚本的调用方式以及当前工作目录的内容,此相对路径查找在服务器上有效。在本地服务器上,这不起作用,因为您的工作目录不同和/或PHP的PATH值设置不同。