2011-07-24 54 views
3

嘗試使用預計類似的類:PHP致命錯誤:「無法寫入環境中使用方法的返回值......」

$client->firstname = 'bob'; 

$client->lastname = 'jones'; 

所以,我想通過這個數據到在一個數組中的腳本...其中的鍵和值設置在其他地方。我想要通過將密鑰和值傳遞給該類的數組。嘗試使用此:

while($Val = current($CreateClientData)){ 

    $client->key($CreateClientData) = $Val; 
    next($CreateClientData); 
} 

得到這個:

Fatal error: Can't use method return value in write context in blahblahpath on line 40.

Line 40 being: $client->key($CreateClientData) = $Val;

我怎樣才能做到這一點?

回答

1

爲什麼不使用foreach循環?

foreach($CreateClientData as $key => $val) { 
    $client->$key = $val; 
} 
3

如果$客戶端已經是某個類的一個實例,$ CreateClientData是一個數組,那麼你可能婉做這樣的事情:

foreach($CreateClientData as $k => $v) { 
    $client->{$k} = $v; 
} 

這是假設當然,在每一個關鍵該數組是$ client實例的有效成員。如果沒有,那麼在分配值之前你必須做一些額外的檢查,否則你將不得不將這個任務包裝在try/catch中。

編輯
答案,爲什麼你的代碼不能正常工作,因爲PHP不允許類屬性有返回值的某些功能的分配。在你的情況下,key($CreateClientData)返回一個密鑰。所以你可以改變你的代碼,只是添加

$key = key($CreateClientData); 
$client->$key = $Val; 

但是,無論如何,foreach循環是一個更清潔。

+0

完美。我從來沒有在foreach中使用過密鑰。謝謝你反駁我的無知。 :) – Rob

相關問題