静态PHP类中的全局变量

时间:2011-08-23 08:14:35

标签: php globals

有没有办法在代码中的任何地方使用全局变量?

我想在我的代码中声明的每个路径中使用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”,这是行不通的。

有办法做到这一点吗?

感谢预期 亚历

4 个答案:

答案 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。

此外,全局变量是一种不好的做法,引入副作用和名称冲突。