我有一个定义这样名字的文件。
<root>/dir1/dir2/file1.php
//directory indicator
define("DI", "../../");
//adding required files
require_once DI . 'lib/Config.php';
require_once DI . 'lib/Common.php';
这会正确添加Config.php
和Common.php
。
现在,当我尝试DI
Config.php
这样的<{1}}
<root>/Config.php
<?php
class Config
{
public $value = DI . 'some_value';
}
我无法在那里得到那个价值。
如何在DI
课程中提供Config
?
Real Folder Hierarchy
ROOT--> somefile.php
|__ lib --> config.php
|
|___ dir1
|
|__ dir2
|
|__ file1.php
我需要在config.php中定义的类中获取根目录。我需要在somefile.php
中添加config.php
。我知道我可以像
include '../somefile.php';
但问题是config.php包含一个包含static
方法的类。所以我可以得到这样的方法。
Config::MethodInsideConfig();
现在,当我从file1.php
尝试此操作时,似乎../somefile.php
正在尝试从dir1
添加。我认为php使用file1.php
的位置来计算前面的目录。但我需要的是它应该从根目录中获取文件。
答案 0 :(得分:0)
将值作为参数注入类__construct(),并在构造函数中设置属性
class Config
{
public $value;
public __construct($di) {
$this->value = $di . 'some_value';
}
}
$myConfig = new Config(DI);
答案 1 :(得分:0)
为什么定义新常量PHP已经预定义了constante DIR它包含当前文件目录。
所以,你的要求是这样的:
//adding required files
require_once __DIR__.'/../../'. '/lib/Config.php';
require_once __DIR__.'/../../'. 'lib/Common.php';
您可以使用配置文件(如config.ini)
[parameteres]
path_app_root="/usr/share/apache/www/my_app";
然后,您的配置为singleton类将用于解析ini文件并获取配置
<?php
class Config
{
public $configs = array();
private static $instance;
private function __construct() {}
public static function getInstance()
{
if (!isset(self::$instance)) {
$c = __CLASS__;
self::$instance = new $c;
self::$instance->configs = parse_ini_file(__DIR__."/../config.ini");
}
return self::$instance;
}
public function getRootPath()
{
return self::$instance->configs['path_app_root'];
}
public function __clone()
{
trigger_error('Clone is not allowed.', E_USER_ERROR);
}
}
你的file1.php将是这样的
<?php
//adding required files
require_once '../../lib/Config.php';
echo Config::getInstance()->getRootPath();
鸭