php read mongodb.findone()返回json值并创建对象

php read mongodb.findone()返回json值并创建对象,php,json,mongodb,object,Php,Json,Mongodb,Object,我有一个employee类,我想从mongodb.findone()返回的数组中初始化employee对象 foreach($res as $key => $value){ echo $value; // here values printed } 但是我需要做一些类似的事情(如果key='first\u name'然后employee\u obj->set\u first\u name($value),如果key='last\u name'然后employee\u obj->s

我有一个employee类,我想从mongodb.findone()返回的数组中初始化employee对象

foreach($res as $key => $value){
    echo $value; // here values printed
}
但是我需要做一些类似的事情(如果key='first\u name'然后employee\u obj->set\u first\u name($value),如果key='last\u name'然后employee\u obj->set\u last\u name($value)…你能帮我吗

$employee = new Employee;

foreach($res as $key => $value){
    if (property_exists($employee, $key)) {
        $employee->$key = $value;
    }
}
$employee->$key=$value
正在将
$key
属性动态分配给员工。例如:

    $key = "name";
    $employee->$key = "John Doe";
    echo $employee->name; // John Doe
如果要对私有或受保护的属性执行此操作,则需要在类或实例中执行赋值:

class Employee {

    // ...
    private $name;

    // lets you assign properties by passing in an array
    public function __construct($arr = array()){
        if count($arr) {
            foreach($arr as $key => $value){
                if (property_exists($this, $key)) {
                    $this->$key = $value;
                }
            }
        }
    }
}

$joe = new Employee(array('name' => 'Joe'));
echo $joe->name // Joe

确实如此。

什么是员工->$key?我的employee类有私有成员m_first_name这会给它分配$value吗?编辑了更多细节,希望这能回答你的问题。这真的很酷,,,但我有一个“坏”传统,就是用m_开头。在我的例子中,名字是不同的。这只是一个例子,你可以给你的财产(成员)命名,不管你想命名什么。如果您使用用户输入进行此操作,请务必小心,因为它需要被列入白名单以避免出现大规模分配漏洞。当然有,,,但这是一种好方法吗?我的意思是,每次检查$key都不是一种有效的方法,是吗?@MherDidaryan好吧,有不同的方法,例如许多框架允许你使用魔法,让
$e->last\u name=“sam”
参考
$e->set\u last\u name(“sam”)
但是如果不深入到PHP语言中进行编码,你就不会变得更好
$e = new Employee;
foreach($res as $k => $v){
    if($k == 'first_name'){
        $e->set_first_name($v);
    }elseif($k == 'last_name'){
        $e->set_last_name($v);
    }else{
        $e->$k = $v;
    }
}