【问题标题】:PHP set current directory to class constantPHP将当前目录设置为类常量
【发布时间】:2009-12-02 04:52:49
【问题描述】:

我在项目的根目录中有一个配置文件,其中包含一类特定于环境的常量。我遇到的问题是如何将当前目录设置为 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__ 不起作用)。

【问题讨论】:

    标签: php oop constants


    【解决方案1】:

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

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

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

    【讨论】:

    • 尽管我采用了完全不同的解决方案,但我还是喜欢它。
    【解决方案2】:

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

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

    然后你可以像这样在任何地方调用它(假设你的配置文件包含在内):

    Config::$ROOT
    

    【讨论】:

      【解决方案3】:

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

      解决方案是这样的:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-03
        相关资源
        最近更新 更多