我有__get
和__set
函數防止動態創建屬性的(以防止輸入錯誤)的數據庫模型:角色對象stdClass的
class UserModel
{
public $Name;
public $LanguageCode; // f.e. "EN", "NL", ...
public function __get($name)
{
throw new Exception("$name is not a member");
}
public function __set($name, $value)
{
throw new Exception("$name is not a member");
}
}
現在,我有UserModel
實例($users
)的陣列我想傳遞給模板引擎。因此,我想在陣列上運行array_map
,並添加要在模板中使用的其他屬性LanguageText
。
$users = array_map(function ($v)
{
$v = (object)$v; // this doesn't help to cast away from UserModel type
$v->LanguageText = GetLanguageText($v->LanguageCode);
return $v;
}, $users);
// pass $users to templating engine
當然行$v->LanguageText = ...
,因爲我嘗試添加一個動態屬性拋出一個錯誤。我試過這個:$v = (object)$v;
將UserModel
對象轉換爲stdClass
,但類型沒有改變。任何想法如何擺脫UserModel
而不必序列化/反序列化數據?
我使用PHP 5.3.5
爲什麼不LanguageText屬性只是添加到類定義? – Orangepill
因爲我已經編寫了類似'.NET Entity framework'的數據庫代碼。模型中的每個屬性都必須映射到數據庫表中的一列。 –
如果您不關心將屬性重新獲取到UserModel對象中,請參閱我的答案。 – Orangepill