2009-03-04 56 views
0

我有一種方法允許我使用數組作爲對象嗎?數組作爲對象

我在我的主類

function __construct() 
{ 
     require 'config.php'; 
     $this->config = new PHPSO_Config(); 
} 

下面的代碼,其中PHPSO_Config類看起來是這樣的

class PHPSO_Config 
{ 
    /** 
    * The administrators email address 
    */ 
    var $adminEmail = '[email protected]'; //I'm using this email to test 
} 

這樣我就可以完成同樣的事情,並能夠訪問配置瓦爾作爲一個對象而不創建第二個類?

回答

4

可以投陣列使用

$myObject = (object) $myarray; 

因而以下應該工作(未測試)的對象:

function __construct() 
{ 
     require 'config.php'; 
     $this->config = (object) array("username" => "root"); 
} 

然後$類 - > config->用戶名應該工作。

+0

我沒有使用它,但它看起來像它會提供我正在尋找的功能。 – UnkwnTech 2009-03-05 07:40:21

-1

好耶

有一個技術,我個人會使用它:

你創造任何你想要的文件調用(即config.php文件) 然後在寫這個forexample:

每當你想使用這些信息,你必須把「require_once」config.php「;」在index.php之類的代碼之上,並且所有定義都將在該頁面中。 例如,您可以通過鍵入$ DB_SERVER來讀取數據庫服務器名稱。

如果我是你的話,我會堅持下去,因爲你可以在你的項目中的任何地方使用它,只需從一個使生活更輕鬆的文件來維護它。

0

我不確定你想要什麼,但是你可以將一個數組轉換成一個對象。確保你不使用數字索引,因爲它們工作不正確;

$config = array('adminEmail' => '[email protected]'); 
$this->config = (object)$config; 
1

你可以使用PHP5 overloading使它看起來類具有由配置類,如所提供的性能是這樣的:

class MyClass 
{ 
    private $config; 

    function __construct() 
    { 
     require 'config.php'; 
     $this->config = new PHPSO_Config(); 
    } 


    public function __get($name) { 
     if (property_exists($this->config, $name)) { 
      return $this->config->$name; 
     } 
     return null; 
} 

然後做這樣的事情:

$config=new MyClass; 
echo $config->adminEmail; 

會導致看到內部配置類的ADMINEMAIL成員變量。

這幾乎是一個Strategy Pattern,其中可以在運行時選擇類的運行時實現。

0

也許我在這裏失去了一些東西,但你是否試圖用數組替換你的配置類,然後將其轉換爲對象?聽起來有點瘋狂。我只需要一個配置類,它的方式更好的設計。

最好不要在你應該有類的地方做數組。