正如描述所述,我有一個函數,它接受一個數組和一個對象作爲參數,並根據對象的類型將所有對象字段賦值給它們各自的值。這些對象都有不同的字段,但它們都有一個type屬性,函數用它來確定分配哪些字段。將PHP類字段分配給數組值時將兩個字段傳遞給函數不會設置字段,爲什麼?
它的工作原理是這樣的:
function unload($arr,&$obj){ <-- //&$obj not $obj
if($obj->type == 'A'){
echo 'Setting field for A';
$obj->a = $arr['a_value'];
//some more assignments..
}
elseif($obj->type == 'B'){
$obj->b = $arr['b_value'];
echo 'Setting field for B';
//some more assignments...
}
//some more elseifs
//return an error if
//object's type doesn't
//match
else{
echo 'Error: Object type '.$obj->type.' not recognized.';
}
}
$arr['a_value'] = 'SomeValue';
$arr['b_value'] = 'SomeOtherValue';
$obj = new A(); //A's type set to 'A' upon initialization
unload($arr,$obj);
echo 'A->a set to: '.$obj->a;
輸出: A->一組到:
的代碼輸入正確的分支爲傳入的對象,但沒有對象的字段得到分配。我究竟做錯了什麼?
服務器運行PHP 4.4.7,我仍然不知道是什麼原因造成的。
編輯:我終於找到它了,它的兩件事情的組合:
從類中引用類的字段名時,我沒有意識到的是所需要的$this
關鍵字。我假設變量具有全局範圍,所以$this
是可選的,就像它在Java中一樣。這就是爲什麼只更改函數聲明並不能解決問題。現在一切正常!
他們在對象中是「私人」嗎? – alex 2010-11-22 00:42:26
看不到任何明顯的錯誤..你能創建一個簡單的測試用例並將其包含在你的問題中嗎?請注意,而不是有一個 - >類型的函數,你可以使用'instanceof'(例如'if($ obj instanceof SomeClass){...' – Hamish 2010-11-22 00:43:25
@Hamish是的工作,但'type'屬性*可能*是與什麼類別無關 – alex 2010-11-22 00:45:46