У меня есть файл, который определяет имя как это.
<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
как это
<root>/Config.php
<?php
class Config
{
public $value = DI . 'some_value';
}
Я не могу получить это значение там.
Как я могу сделать DI
доступны внутри Config
учебный класс ?
Реальная папочная иерархия
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
Расположение для расчета предыдущего каталога. Но мне нужно получить файл из корневого каталога.
Вставьте значение в качестве аргумента в ваш класс __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';
Вы можете использовать файл конфигурации (например, config.ini)
[parameteres]
path_app_root="/usr/share/apache/www/my_app";
Затем ваш конфиг как синглтон-класс будет использоваться для анализа 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();
Анас