【问题标题】:Trouble with returning array from included file for config从包含的文件返回数组进行配置时遇到问题
【发布时间】:2015-04-15 07:33:47
【问题描述】:

我正在尝试做一个简单的配置类来从配置文件中读取数组。 在哪里包含具有 return array() 内容的文件。很简单。

我想我会稍微扩展一下以使用点表示法,第一个元素是文件名。但是,如果您尝试访问同一个文件中的数据两次,它会尝试再次包含该文件,但这是行不通的。

public static function get($path=null,$ext='php'){
    if(!$path)return false;

    $path = explode('.',$path);
    $file = $path[0] . '.' . $ext;

    //remove file name.
    unset($path[0]);

    $files = scandir(CONFIG);

    if(in_array($file,$files)){

        $data = include_once(CONFIG.$file);

        foreach($path as $element){

            if(isset($data[$element])){

                $data = $data[$element];

            }
        }

        return $data;

    } else {

        return false;

    }

 }

只要您不再需要该文件中的任何其他内容,它就可以很好地工作。这里有一个简单的解决方法,还是我完全湿了?

【问题讨论】:

  • 如果将include_once 替换为include,则可以多次使用该文件。
  • WTH。我试了几次都没有用,但现在突然它起作用了......??任何。谢谢你。

标签: php configuration


【解决方案1】:

你应该让类缓存变量..像:

public static $configData = array();

然后在函数调用时,首先检查配置文件是否已经加载到configData中。所以在函数调用时,检查

if (!isset(self::$configData[$filename])) {
   ...load not loaded file and get some $configurationFromFile array..
   self::$configData[$filename] = $configurationFromFile
}

然后检查是否所有内容都已加载

if (isset(self::$configData[$filename][$key]) {
  return self::$configData[$filename][$key];
} else {
  return false
}

所以如果你已经加载了配置文件,你将永远不会再次尝试扫描该目录。它对性能有好处。而且性能必须很高,比如配置获取。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2016-04-14
    • 1970-01-01
    • 2015-02-27
    • 2021-08-25
    • 2016-12-27
    • 1970-01-01
    相关资源
    最近更新 更多