有没有办法在代码中的任何地方使用全局变量?
我想在我的代码中声明的每个路径中使用Path变量来定位已配置的文件夹。
这是我的代码: 的index.php
<?php
require_once('Common.php');
require_once('Path.php');
?>
的common.php
<?php
$RootPath = '.';//in this case its root
//add the RootPath for global using
$GLOBALS['RootPath'] = $RootPath;
?>
Path.php
<?php
class Path {
public static $TemplatePath = $GLOBALS['RootPath'].'/Template.php';
}
?>
当我在声明一个静态变量时尝试调用$ GLOBALS时,它会说“解析错误:语法错误,意外的T_VARIABLE”,这是行不通的。
有办法做到这一点吗?
感谢预期 亚历
答案 0 :(得分:2)
您要找的是constants。
使用它们来定义某些路径是很常见的,例如
define('PATH_ROOT', $_SERVER['DOCUMENT_ROOT']);
define('PATH_TEMPLATES', PATH_ROOT.'/templates');
答案 1 :(得分:1)
无法使用动态数据初始化类常量和静态类变量。
如何定义方法呢?
class Path {
public static getTemplatePath()
{
return $GLOBALS['RootPath'].'/Template.php';
}
}
为什么要将设置保留为全局变量,而不是将它们封装在某种Registry中?
答案 2 :(得分:0)
每当你想在一个超出范围的函数中使用全局变量时,你必须首先在函数/ class方法中用“global $ varname”声明它。
在你的情况下:
的common.php
<?php
$RootPath = '.';//in this case its root
//add the RootPath for global using
// $GLOBALS['RootPath'] = $RootPath; // no need for this, $[GLOBALS] is about the Superglobals, $_SERVER, $_SESSION, $_GET, $_POST and so on, not for global variables.
?>
Path.php
<?php
class Path {
public static $TemplatePath;// = $GLOBALS['RootPath'].'/Template.php';
public method __construct(){
global $RootPath;
self::TemplatePath = $RootPath.'/Template.php';
}
}
?>
答案 3 :(得分:0)
将您的(坏)公共静态属性转换为公共静态getter / setter。
此外,全局变量是一种不好的做法,引入副作用和名称冲突。