Php 将数组转换为类对象

Php 将数组转换为类对象,php,arrays,class,Php,Arrays,Class,我正在使用MongoDB作为数据库编写一个RESTful应用程序。php mongo驱动程序以php数组的形式返回查询结果,无论出于何种目的,它看起来都像我的类对象。在php中是否可以将查询结果强制转换为类对象 类似地,我可以用同样的方法强制转换JSON解码的php数组吗,即使它缺少一些属性?那么,您可以将其强制转换为stdClass: $a = ['a' => 1, 'b' => 2]; $object = (object) $a; 但我猜你不是在寻找它,你可能是在试图给它补水

我正在使用MongoDB作为数据库编写一个RESTful应用程序。php mongo驱动程序以php数组的形式返回查询结果,无论出于何种目的,它看起来都像我的类对象。在php中是否可以将查询结果强制转换为类对象


类似地,我可以用同样的方法强制转换JSON解码的php数组吗,即使它缺少一些属性?

那么,您可以将其强制转换为stdClass:

$a = ['a' => 1, 'b' => 2];
$object = (object) $a;
但我猜你不是在寻找它,你可能是在试图给它补水

在这种情况下,您可以这样做(假设您使用的是公共属性):

或者,如果使用的是“获取集”方法,请将“赋值行”更改为:

$setter = 'set' . ucfirst($key);
$object->$setter($val);
最终实施可能会有所不同。你有3个选择,我可以考虑:

  • 使所有模型类扩展实现此功能的某个基类
  • 创建一个实现它的特性
  • 在连接周围创建一个包装器来实现这一点(我建议这样做)
  • 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);
    

    可能是@johncode的重复我看到了这一点,但它看起来不像我的问题那么具体,我正在寻找一种方法将它转换为一个特定的类,而问题是要将它设置为一个泛型对象。
    $myArray = ['a' => 5, 'b' => 10];
    $myModel = MyModel::fromArray($myArray);