0

我试图弄清楚这一点,但一直没能。我正在尝试创建一个函数,该函数将在需要时将不同的配置文件包含到脚本中。我想将所有变量存储在数组中,然后使用一个函数来包含它们。

例子

配置文件

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

使用.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);

我知道如果您在函数中包含一个文件,它们将不会超出函数的范围。这将由自动加载器加载,因此我可以在脚本中的任何位置使用它。

在此先感谢,如果您需要更多信息,请告诉我。

4

2 回答 2

0

看看这个: http: //php.net/manual/en/function.parse-ini-file.php

但简单来说,你可以这样:

配置文件

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

然后在你的 php 中:

include_once('config.inc.php');

或者您可以将其用于 INI 样式的包含文件: http: //php.net/manual/en/function.parse-ini-file.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);
于 2013-10-14T05:17:02.987 回答
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 是什么的更多信息,请参阅此视频,以及此 google clean code talk以帮助理解为什么使用这样的静态是一个坏主意。

于 2013-10-14T05:33:51.300 回答