Php 将对象强制转换为stdClass
我有一个带有Php 将对象强制转换为stdClass,php,Php,我有一个带有\uuu get和\uu set功能的数据库模型,这些功能可以防止动态创建属性(防止键入错误): 现在,我有了一个UserModel实例数组($users),我希望将其传递给模板引擎。因此,我想在数组上运行array\u map,并添加一个额外的属性LanguageText,以便在模板中使用 $users = array_map(function ($v) { $v = (object)$v; // this doesn't help to cast away from Us
\uuu get
和\uu set
功能的数据库模型,这些功能可以防止动态创建属性(防止键入错误):
现在,我有了一个UserModel
实例数组($users
),我希望将其传递给模板引擎。因此,我想在数组上运行array\u 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
而不必序列化/取消序列化数据吗
我使用的是PHP5.3.5您必须执行双重强制转换才能执行您想要的操作
$v = (object)(array)$v;
为什么不将LanguageText属性添加到类定义中呢?因为我已经编写了类似于
.NET实体框架的数据库代码。模型中的每个属性都必须映射到数据库表中的一列。如果您不关心将属性返回到UserModel对象中,请查看我的答案。根据所使用的框架,这可能是视图帮助器的一个很好的用例,因此视图可以解析语言文本,而不必依赖上下文来提供它。
$v = (object)(array)$v;