2011-03-18 73 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

你需要做的是將你的數組轉換爲對象。然而,只是爲了能夠通過 - >而不是聯合索引來訪問屬性,從數組到對象的轉換是 - 好吧,如果你問我,很愚蠢。