如何使已定义的名称全局可用



我有一个文件,它定义了这样的名称。

<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.phpCommon.php

现在,当我尝试像这个一样在Config.php中获得DI

<root>/Config.php

<?php
class Config
{
   public $value = DI . 'some_value';
}

我无法在那里得到那个值。

如何使DIConfig类中可用?

编辑

真实文件夹层次

ROOT--> somefile.php
|__ lib --> config.php
|
|___ dir1
     |
     |__  dir2  
          |
          |__ file1.php

我需要在config.php中定义的类中获取根目录。也就是说,我需要包括config.php中的somefile.php。我知道我可以像一样简单地做到这一点

 include '../somefile.php';

但问题是config.php拥有一个包含static方法的类。所以我可以得到这样的方法。

  Config::MethodInsideConfig();

现在,当我从file1.php尝试这个时,似乎../somefile.php正在尝试从dir1中包含。我认为php使用file1.php的位置来计算前面的目录。但我需要的是它应该从根目录中获取文件。

将值作为参数注入到类__construct()中,并在构造函数中设置属性

class Config
{
    public $value;
    public __construct($di) {
        $this->value = $di . 'some_value';
    }
}
$myConfig = new Config(DI);

为什么定义新常量PHP已经有预定义的常量DIR它包含当前文件目录。

所以,你的要求是这样的:

//adding required files
require_once __DIR__.'/../../'. '/lib/Config.php';
require_once __DIR__.'/../../'. 'lib/Common.php';

  • 使用INI文件

您可以使用配置文件(如config.ini)

[parameteres]
path_app_root="/usr/share/apache/www/my_app";

然后,您的config as singleton类将用于解析ini文件并获取config

<?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();

Anas

相关内容

  • 没有找到相关文章

最新更新