2013-10-14 6 views
0

Я пытаюсь понять это и не смог. Я пытаюсь создать функцию, которая будет включать в нее различные файлы конфигурации в случае необходимости. Я хочу сохранить все переменные в массивах, а затем использовать функцию для их включения.Динамически включают переменные php

Пример

Config.php

$array = array(
'var1' => 'something', 
'var2' => 'something else' 
); 

uses.php

class uses{ 

     public static function file($directory, $file){ 

     if(is_dir($directory)) 
     { 
      if(is_file($directory.$file)) 
      {   
      include $directory.$file; 

      } 
      else 
      { 
      echo "File Not Found $directory$file"; 
      } 
     } 
     else 
     { 
      echo 'Dir Not Found'; 
     } 
    } 
} 

index.php после того, как я включил использует файл

uses::file(Config.php); 
print_r($array); 

Я знаю, если вы включаете файл внутри functio n они не пройдут за пределы функции. Это будет загружено автозагрузчиком, чтобы я мог использовать его в любом месте внутри моего скрипта.

Заранее спасибо, если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

+0

Каков ваш вопрос точно – crafter

+0

Энтони, это очень важная концепция в вашем понимании PHP, поэтому я предлагаю вам вернуться к вашим нотам PHP для этого. http://php.net/manual/en/language.variables.php Сказав это, переменные не имеют автоматической области файлов. Они обычно локальны к уровню контекста, в котором они определены (и первое использование иногда неявно определяет их). включают директивы, с другой стороны, просто служат инструментами замены кода и позволяют разбить код. Он не влияет на объем переменных, чем если бы вы включили весь полученный код в один файл. \ – crafter

+0

Как именно функция «файл» связана с массивом? –

ответ

0

Мне кажется, вы можете идти об этом неправильно. Но сначала проблемы с кодом, который вы представили. Кажется, что ваш код запрашивает два параметра, но вы проходите только один. Это заставит ваши вызовы is_dir/is_file всегда терпеть неудачу, потому что оба условия никогда не будут истинными одновременно, поэтому ваш файл не будет включен.

Кроме того, вы не указываете возвращаемое значение на все, что имеет время жизни больше, чем время выполнения вашей статической функции, поэтому даже если файл был включен, ваша переменная конфигурации в конечном итоге будет выброшена.

Чтобы очистить существующий код, вы можете что-то сделать в этих строках.

<?php 
class Config { 
    static public $config; 

    public static function load($path, $file){ 
     if (file_exists($path.$file) && is_file($path.$file)){ 
      self::$config = include ($path.file); 
     } 
    } 
} 

Затем вы изменили бы включенный файл, чтобы вернуть данные вместо назначения его переменной. Как

<?php 
return array(
    'var1' => 'something', 
    'var2' => 'something else' 
); 

Тогда вы сможете использовать его вот так.

Config::load("/path/to/config/", "Config.php"); 
echo Config::$config["var1"]; 

Хотя это приведет к тому, что код будет вести себя так, как вы пытаетесь это сделать, это, вероятно, плохая идея. Вы должны использовать инъекцию зависимостей в своих других классах вместо того, чтобы ссылаться на статическое свойство с другими вашими классами. Это даст вам шов при тестировании, а также позволит вашим методам и классам документировать в подписях конструктора и метода именно то, что необходимо для выполнения заданной задачи. См. this video для получения дополнительной информации о том, что такое DI, и this google clean code talk, чтобы понять, почему использование статики, как, это плохая идея.

0

Взгляните на это: http://php.net/manual/en/function.parse-ini-file.php

Но в простых условиях вы могли бы так это:

config.inc.php

$config['var1'] = 'Hello'; 
$config['var2'] = 'World'; 

Затем в PHP:

include_once('config.inc.php'); 

или вы можете использовать это для файла типа INI include: http://php.net/manual/en/function.parse-ini-file.php

config.inc.php

[first_section] 
one = 1 
five = 5 
animal = BIRD 

[second_section] 
path = "/usr/local/bin" 
URL = "http://www.example.com/~username" 

Затем в PHP:

$ini_array = parse_ini_file("sample.ini", true); 
print_r($ini_array); 
Смежные вопросы