2012-10-14 72 views
52

我無法在書籍或網頁上找到任何示例,描述如何正確初始化僅按名稱(具有空值的關聯數組) - 當然,除非這樣方法得當使用鍵名稱初始化關聯數組但是空值

它只是感覺好像還有另一種更有效的方式來做到這一點(?):

的config.php

class config { 
    public static $database = array (
     'dbdriver' => '', 
     'dbhost' => '', 
     'dbname' -> '', 
     'dbuser' => '', 
     'dbpass' => '' 
    ); 
} 

// Is this the right way to initialize an Associative Array with blank values? 
// I know it works fine, but it just seems ... longer than necessary. 

的index.php

require config.php 

config::$database['dbdriver'] = 'mysql'; 
config::$database['dbhost'] = 'localhost'; 
config::$database['dbname'] = 'test_database'; 
config::$database['dbuser'] = 'testing'; 
config::$database['dbpass'] = '[email protected]$$w0rd'; 

// This code is irrelevant, only to show that the above array NEEDS to have Key 
// names, but Values that will be filled in by a user via a form, or whatever. 

任何建議,意見或建議,將不勝感激。謝謝。

+0

嘿,並不重要,但你寫 'DBNAME' - > '',它應該已經 'DBNAME'=>' ' - 我沒有足夠的聲望來進行編輯。 – Martha

回答

47

你有什麼是最明確的選擇。

但你可以把它用array_fill_keys,像這樣縮短:

$database = array_fill_keys(
    array('dbdriver', 'dbhost', 'dbname', 'dbuser', 'dbpass'), ''); 

但是,如果用戶有反正填補值,你可以離開陣列空的,只是提供索引示例代碼。 PHP。當您分配一個值時,這些鍵將自動添加。

+0

但是,您必須在課程之外執行此操作,因爲您無法在類變量聲明中調用任何函數。 *可能會導致更多的代碼或初始化代碼出現在您不希望看到的地方。 – BoltClock

+0

這就是我一直在尋找的!謝謝! – NYCBilly

+0

@BoltClock是的,我不會選擇這個選項。那些'正常'數組初始化所需的額外字符使我更清楚代碼的作用。我會保持原樣。只是表明,如果你想,有辦法做到這一點。 :)你可以在構造函數中做到這一點,但當然不能用於靜態類。 – GolezTrol

1

第一個文件:

class config { 
    public static $database = array(); 
} 

其他文件:

config::$database = array(
    'driver' => 'mysql', 
    'dbhost' => 'localhost', 
    'dbname' => 'test_database', 
    'dbuser' => 'testing', 
    'dbpass' => '[email protected]$$w0rd' 
); 
+0

這是硬編碼,我的第二個文件只是一個例子 - 我需要已經定義的鍵。 – NYCBilly