动态包含变量php

时间:2013-10-14 05:00:51

标签: 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);

我知道如果在函数中包含一个文件,它们将无法超出函数的范围。这将由一个自动加载器加载,所以我可以在我的脚本内的任何地方使用它。

提前致谢,如果您需要更多信息,请告知我们。

2 个答案:

答案 0 :(得分: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样式包含文件: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);

答案 1 :(得分: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"];

虽然这会使代码按照您尝试的方式运行,但这可能是一个坏主意。您应该在其他类中使用依赖注入,而不是使用其他类调用静态属性。这样可以在进行测试时为您提供接缝,并允许您的方法和类在构造函数和方法签名中准确记录执行给定任务所需的内容。有关DI是什么的更多信息,请参阅this video,以及this google clean code talk,以帮助理解为什么使用这样的静态是一个坏主意。