2013-07-18 93 views
4

我有__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

+0

爲什麼不LanguageText屬性只是添加到類定義? – Orangepill

+0

因爲我已經編寫了類似'.NET Entity framework'的數據庫代碼。模型中的每個屬性都必須映射到數據庫表中的一列。 –

+0

如果您不關心將屬性重新獲取到UserModel對象中,請參閱我的答案。 – Orangepill

回答

15

你必須做一個雙投給你想要做什麼......

$v = (object)(array)$v; 
+0

根據使用的框架,這可能是視圖助手的一個很好的用例,因此視圖可以解析語言文本,而不必依賴上下文來提供它。 – Orangepill

+0

我收到以下錯誤:'非法偏移類型' – Pathros