9

プロパティの動的な作成を防ぐ (入力ミスを防ぐため)__getと関数を備えたデータベース モデルがあります。__set

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_mapLanguageText

$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;にキャストしますが、型は変更されません。データをシリアル化/非シリアル化せずにキャストする方法はありますか?UserModelstdClassUserModel

私はPHP 5.3.5を使用しています

4

1 に答える 1

24

あなたが望むことをするためには、ダブルキャストをしなければなりません...

$v = (object)(array)$v;
于 2013-07-18T19:05:14.570 に答える