使用类时如何处理数据-PHP

时间:2018-08-15 12:21:27

标签: php codeigniter oop

我目前在CodeIgniter内工作,我正在努力了解如何在编程中正确使用贫血或富实体类

我希望创建一个具有吸气剂/阻气剂的贫血实体,但我想知道这一切如何工作。

例如:

在第一次创建对象的实例时,我可以使用该对象设置和获取信息,但是从数据库中检索信息时,如何将信息返回到对象中,以便可以使用对象方法?

我听说过使用Doctrine将对象映射到关系数据库,但是我已经创建了要使用的数据库架构,并且不确定是否可以将Doctrine映射到现有数据库。

我已经考虑过尝试:

  • 使用__construct函数设置所有对象属性 使用我从SQL查询中获得的数组,这似乎是不正确的。
  • 创建对象的实例并设置所有对象 从SQL查询获得的数组值的属性,这似乎很乏味。
  • 在对象中创建一个方法,该方法采用从中获取的数组 SQL查询并将所有值分配给适当的对象 属性,看起来还可以。

但是我的问题是: 是否有一种普遍接受的做法?(除教义以外)

1 个答案:

答案 0 :(得分:1)

我建议使用Doctrine或其他ORM工具,但是如果您要DIY,这是使用反射的一个小例子。

<?php

class Foo {
    private $id;
    private $name;

    public function getId(){ return $this->id; }

    public function getName(){ return $this->name; }

    public function setName($name){ return $this->name = $name; }
}

$dataFromDb = [
    [
        'id' => 1,
        'name' => 'John'
    ]
];


foreach ($dataFromDb as $row) {
    $foo = new Foo();
    $ref = new ReflectionClass('Foo');

    foreach ($row as $propName => $propValue) {
        $prop = $ref->getProperty($propName);
        $prop->setAccessible(true);
        $prop->setValue($foo, $propValue);
    }

    var_dump($foo);
}