PHP将当前目录设置为类常量
我在项目的根目录中有一个配置文件,其中包含一类特定于环境的常量。我遇到的问题是如何将当前目录设置为根变量PHP将当前目录设置为类常量,php,oop,constants,Php,Oop,Constants,我在项目的根目录中有一个配置文件,其中包含一类特定于环境的常量。我遇到的问题是如何将当前目录设置为根变量 Class Config { const ROOT = dirname(__FILE__); } 这是不可能的,因为它是一个常量表达式。我还尝试在每个实例的交易中更改它,如: Class Config { const ROOT = '/old/path'; public function __construct(){ $this->ROOT = '/new/path';
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,所以
\uuuuu DIR\uuuu
不起作用)。您可以使用静态属性,而不是像这样的常量:
Class Config {
public static $ROOT = ''; // Can't call dirname yet
}
Config::$ROOT = dirname( __FILE__ ); // Now we can set it
Config::$ROOT
然后您可以在任何地方调用它(假设包含您的配置文件),如下所示:
Class Config {
public static $ROOT = ''; // Can't call dirname yet
}
Config::$ROOT = dirname( __FILE__ ); // Now we can set it
Config::$ROOT
使其成为第一次调用时初始化的静态函数:
class Conf {
static protected $_root= null;
static public function root() {
if (is_null(self::$_root)) self::$_root= dirname(__FILE__);
return self::$_root;
}
}
这允许您在类中设置root,并保护root的值不被覆盖。我正在研究这个问题,因为我在另一个项目中找到了另一个解决方案。
项目已经使用了常量,因此我无法更改对Config::ROOT
常量的所有调用
解决办法是:
<?php
// classes/Config.php
eval('class Config { const ROOT = "'.dirname(__FILE__).'"; }');
尽管我采用了完全不同的解决方案,但我喜欢它。