我正在使用MongoDB作为数据库编写RESTful应用程序。 php mongo驱动程序将查询结果作为php数组返回,出于所有意图和目的,它看起来就像我的类对象。是否可以在php中将查询结果强制转换为类对象?
同样,我可以以相同的方式投射JSON解码的php数组,即使它缺少一些属性吗?
答案 0 :(得分:1)
好吧,你可以将它转换为stdClass:
$a = ['a' => 1, 'b' => 2];
$object = (object) $a;
但我想你不是在寻找,你可能想要保湿它。
在这种情况下,你可以做这样的事情(假设你正在使用公共属性):
function castToObject(array $array, $className)
{
$object = new $className();
foreach ($array as $key => $val) {
$object->$key = $val;
}
return $object;
}
或者如果您使用的是get-set方法,请将赋值行更改为:
$setter = 'set' . ucfirst($key);
$object->$setter($val);
最终实施可能会有所不同。你有三个我可以考虑的选择:
Trait看起来像这样:
trait FromArrayTrait
{
public static function fromArray(array $array)
{
$myClass = get_class();
$object = new $myClass();
foreach ($array as $key => $val) {
$object->$key = $val;
}
return $object;
}
}
在每个模型中你都可以:
class MyModel
{
use FromArrayTrait;
public $a;
public $b;
}
然后在你的逻辑中:
$myArray = ['a' => 5, 'b' => 10];
$myModel = MyModel::fromArray($myArray);