将数组转换为类对象

时间:2014-01-05 17:15:49

标签: php arrays class

我正在使用MongoDB作为数据库编写RESTful应用程序。 php mongo驱动程序将查询结果作为php数组返回,出于所有意图和目的,它看起来就像我的类对象。是否可以在php中将查询结果强制转换为类对象?

同样,我可以以相同的方式投射JSON解码的php数组,即使它缺少一些属性吗?

1 个答案:

答案 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);

最终实施可能会有所不同。你有三个我可以考虑的选择:

  1. 使所有模型类扩展一些实现此功能的基类。
  2. 创建实现它的特征
  3. 在您的连接周围创建一个包装器(我建议这样做)
  4. 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);