2013-09-23 73 views
4

我使用PHP 5.3和extract()函數。PHP提取到類變量

這是一類我建立的一個簡單的例子:

private api_username; 
private api_password; 
private api_signature; 
private version = '63.0'; 

public function __construct($credentials) { 
    extract($credentials); 

    $this->api_username = $api_username; 
} 

的問題是,提取後,我必須通過變量去逐一併將它們分配給類變量。

有沒有辦法直接提取類變量,所以我不必做項目分配?

回答

11

如果$credentials數組的密鑰與私有變量的名稱完全匹配,則可以使用variable variables來完成此操作(將密鑰作爲變量)。

public function __construct($credentials) { 
    foreach($credentials as $key => $value) { 
     $this->$key = $value; 
    } 
} 

雖然,確保您傳入的數組具有正確的鍵。

+0

感謝。這是一個很好的答案。 –

+0

不使用'提取'的獎勵積分 – chiliNUT

0

這可能是不安全的事,和你使用的方法違背了最廣爲接受的機型,同時:

foreach ($credentials as $key => $value) { 
    if (property_exists($this,$key)) { 
     $this->$key = $value; 
    } 
} 
+0

'您使用的方法違反了大多數公認的模型'也許。但是我發現PHP對於擴展「接受模型」的定義非常有用。 –

0

你可以試試這個:

extract($credentials, EXTR_REFS); 
foreach ($credentials as $key => $value) { 
     $this->$key = $$key; 
} 
+1

爲什麼要經歷提取和使用雙變量變量來獲取值的麻煩,而在循環的單個變量中有值? – Styxxy

+0

確實,$ this - > $ key = $ value; – psxmod