我正在尝试创建一个可以为我加载.ini
文件的类。我要指定我正在使用的应用程序的名称,然后给它一个或一组文件,以便为我加载。一旦完成,我就这样称呼它。
Ini::path(BASE_PATH . "config" . DS);
Ini::set_app("testApp");
Ini::load(array("db", "web", "themer"));
然后我试图像这样使用它
echo Ini::$get['testApp']['someKey']['someValue'];
目前我可以在没有设置Ini::$app
的情况下使用它,因为我正在尝试添加这些功能。即Ini::$get['someKey']['someValue'];
我的问题是我无法弄清楚如何将更多.ini
个文件推送到Ini::$get
数组中。用法应该是这样的
Ini::push("anotherIni");
假设调用我的push
方法并将新文件推送到数组中。但我似乎无法正确构建数组。要么是这样,要么就不可能将新值推送到静态数组中。
我使用array_push尝试的数组看起来像是用print_r()
Array ( [testApp] => )
否则它输出这个没有我试图将新的ini推入数组
Array ( [testApp] => Array ( [db] => [web] => [themer] => ) )
这是我的班级文件(更新以反映答案)
class Ini {
public static $get = array();
public static $tmp = array();
public static $path;
public static $app;
public static $push;
public static function load($file)
{
if (is_array($file)) {
foreach ($file as $ini)
self::$get[self::$app][$ini] = parse_ini_file(self::$path . $ini . ".ini", true);
//array_push(self::$get[self::$app], "testIni");
} else {
self::$get[self::$app][$file] = parse_ini_file(self::$path . $file . ".ini", true);
}
}
public static function push($file)
{
self::$tmp[$file] = parse_ini_file(self::$path . $file . ".ini", true);
array_push(self::$get[self::$app], self::$tmp[$file]);
}
public static function set_app($name)
{
self::$app = $name;
self::$get[self::$app] = array();
}
public static function path($path)
{
self::$path = $path;
return self::$path;
}
// TODO: Create 'write', 'delete', 'append' function to change ini values
}
答案 0 :(得分:1)
问题出在这一行:
array_push(self::$get[self::$app], $file);
array_push()
期望一个数组作为它的第一个参数。我将您的类复制粘贴到PHP文件中,然后使用以下代码:
Ini::$app = 'Some App';
Ini::push('something.ini');
并收到“array_push()
期待...”错误。这是因为self::$get[self::$app]
是字符串,而不是数组。
因此,您需要一种方法,将$get
数组的第一个条目设置为具有self::$app
的键和空白数组的值。这个附加方法为我修复了它:
public static function set_app_name($name)
{
self::$app = $name;
self::$get[self::$app] = array();
}
然后使用
Ini::set_app_name('Some App');
答案 1 :(得分:0)
我会回答你的问题,但恕我直言,您的代码有几个主要问题:
$app
静态属性的目的不明确。它需要在加载或读取文件之前初始化。这几乎是不可读的。至少,您的代码使用方法setDefaultApp($appName)
会更清晰,而不是直接设置此属性。在数组$e
的末尾添加元素$a
有两种语法:
$a[] = $e;
array_push($a, $e); // scarcely used
使用后一种语法,$a
必须是数组it won't be initialized。所以使用替代语法:
self::$get[self::$app][] = $file;
但我强烈建议您选择更具可读性的API。致echo Ini::$get['testApp']['someKey']['someValue'];
我更喜欢echo $ini->get('testApp')['someKey']['someValue'];