PHP魔术方法问题

时间:2011-03-18 13:42:13

标签: php

我将某个项目的所有变量设置存储在名为Ini的类中。变量存储在一组数组中。例如,我有几个数组 - 一个用于'数据库'相关的东西,另一个用于'调试'相关的东西,等等。

因此,要访问我的代码中的某些设置,我会输入:

$ini = new Ini();
echo $ini->database['user'];
echo $ini->debug['mode'];

我不喜欢这样做。我想访问存储在Ini类中的变量,如下所示:

$ini->database->user;

$ini->debug->mode;

问题是我在另一个对象中引用了非现有对象。我发现无法捕获此类调用并返回存储在原始Ini对象中的值(通过PHP __get()方法)

希望能帮助我找到解决问题的方法。

4 个答案:

答案 0 :(得分:2)

您可以使用stdClass对象代替数组。

stdClass是一个泛型类,可以用作数据的容器,而不是使用对象语法获取值。

示例:

class Ini() {
    public $database;

    public function __construct() {
        $this->database = new stdClass();
        $this->database->user = 'foo';
    }

}

然后

$ini = new Ini();
echo $ini->database->user; //outputs 'foo'

答案 1 :(得分:2)

只需创建标准类的对象:

$a = new stdClass;
$a->database = new stdClass;
$a->database->host = 'localhost';


echo $a->database->host;

作为可选选项,您可以使用现有数组并将它们转换为对象并使用相同的语法进行访问:

$a = new stdClass;
$a->database = new stdClass;
$a->database = (object)array('host' => 'localhost');


echo $a->database->host;

答案 2 :(得分:1)

看看Zend_Config。它完全符合您的要求并支持各种格式

  • PHP数组
  • .ini文件
  • XML

答案 3 :(得分:0)

您需要做的是将数组转换为对象。但是,只是为了能够通过 - >访问属性而进行从数组到对象的转换。而不是关联索引是 - 好吧,如果你问我傻。