PHP将当前目录设置为类常量

时间:2009-12-02 04:52:50

标签: php oop constants

我在项目的根目录下有一个配置文件,其中包含一类特定于环境的常量。我遇到的问题是如何将当前目录设置为ROOT var。有什么影响:

Class Config {
  const ROOT = dirname(__FILE__);
}

这是不可能的,因为它是一个常量表达式。我也试过在每个实例交易中更改它,如:

Class Config {
  const ROOT = '/old/path';
  public function __construct(){ $this->ROOT = '/new/path'; echo $this->ROOT; }
}
$config = new Config;

这似乎有效,但这需要在我的所有类之间传递$ config。有没有人发现这个黑客?

(另外,我还没有使用php5.3,所以__DIR__无效)。

3 个答案:

答案 0 :(得分:4)

使其成为第一次调用时初始化的静态函数:

class Conf {

 static protected $_root= null;

 static public function root() {
  if (is_null(self::$_root)) self::$_root= dirname(__FILE__);
  return self::$_root;
 }

}

这允许您在类中设置root并保护root的值不被覆盖。

答案 1 :(得分:1)

您可以使用static属性而不是像这样的常量:

Class Config {
    public static $ROOT = ''; // Can't call dirname yet
}
Config::$ROOT = dirname( __FILE__ ); // Now we can set it

然后你可以在任何地方调用它(假设包含你的配置文件),如下所示:

Config::$ROOT

答案 2 :(得分:0)

我正在挖掘这个问题因为我在另一个项目中找到了另一个解决方案。 该项目已使用常量,因此我无法更改对Config::ROOT常量的所有调用。

解决方案就是这个:

<?php
// classes/Config.php
eval('class Config { const ROOT = "'.dirname(__FILE__).'"; }');

它非常丑陋,但它适用于这种情况。