2011-03-18 52 views
1

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

因此,为了例如获得在我的代码的某些设置,我会键入:

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

我不喜欢我这样做的方式。我想访问存储在内部Ini类这样的变量:

$ini->database->user; 

$ini->debug->mode; 

的问题是,我引用其他对象中不存在的对象。我发现没有办法赶上存储在原始Ini对象(通过PHP __get()方法)存储这样的呼叫和返回值

希望一些帮助找到解决我的问题。

+0

请发布您的代码... – glomad 2011-03-18 13:44:28

+0

所以基本上你想重载PHP的' - >'功能? – Neal 2011-03-18 13:45:26

+0

为什么不创建一个具有这种性质的复合类型? – 2011-03-18 13:45:59

回答

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; 
+0

谢谢! :)这是我正在寻找的解决方案 – Termos 2011-03-18 14:00:03

1

看看Zend_Config。这不正是你以后在做什么,并支持各种格式

  • PHP数组
  • .ini文件
  • XML
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' 
0

你需要做的是将你的数组转换为对象。然而,只是为了能够通过 - >而不是联合索引来访问属性,从数组到对象的转换是 - 好吧,如果你问我,很愚蠢。