如何处理创建全新对象和从数据库检索对象的问题?PHP/MySQL面向对象

如何处理创建全新对象和从数据库检索对象的问题?PHP/MySQL面向对象,php,database,oop,Php,Database,Oop,$object=新的myClass($name) 如果我使用“new”在应用程序中创建一个新对象以保存到db,那么我应该使用什么方法从db中检索现有对象 是否有标准程序来处理真正的新对象,而不是从数据库中获取现有对象 编辑: 让构造函数根据参数进行更改是不是一个坏主意 i、 e 通常,您需要一个集合类来实例化新对象 因为每个记录一个db查询是浪费的 因此,您将拥有一个模拟db记录的类和一个模拟记录列表的类 class collection { protected $filters =

$object=新的myClass($name)

如果我使用“new”在应用程序中创建一个新对象以保存到db,那么我应该使用什么方法从db中检索现有对象

是否有标准程序来处理真正的新对象,而不是从数据库中获取现有对象

编辑:

让构造函数根据参数进行更改是不是一个坏主意

i、 e


通常,您需要一个集合类来实例化新对象

因为每个记录一个db查询是浪费的

因此,您将拥有一个模拟db记录的类和一个模拟记录列表的类

 class collection {
     protected $filters = array('ids' => array(), 'published' => true, 'name' => '');
     protected $records = array();
     public function __construct($filters) {
         // validate $filters content here
         $this->filters = array_merge($this->filters, $filters);
         $query = $this->generateQueryUsing($this->filters);
         $pdos = $pdo->query($query);

         foreach($pdos->fetch(PDO::FETCH_CLASS, 'Record', array(NULL, FALSE)) AS $item)
            $this->records[] = $item;

         foreach($pdos->fetch() AS $item)
            $this->records[] = new Record($item, FALSE); // Record::__construct($data, $is_new = TRUE)


     }
 }

你是说使用“new”关键字应该用于单独创建的新记录,而Collection类应该用于检索现有记录集?基本上是的,但请记住new与PHP存储在内存中的对象相关,即使在集合类中创建对象,也会调用其构造函数。。。因此,如果new===insert,则会得到重复的。当前我使用的是new,然后是一个单独的成员函数save()。为了获取现有数据,我使用了一个静态方法getBy($method,$value),它返回一个由$this对象组成的数组。我只是不知道我是完全怪异还是有点正常。我梦想拥有持久的语言特征。我想你也是。我正在开发一个框架,它记录new/unset的使用,以便插入/删除,并记录属性值的更改,以便更新。我不调用框架中的任何get/save/delete函数。您必须知道类在数据库中是持久的,如果不希望插入,请使用unset。所有插入/更新/删除操作都以事务方式发生在脚本末尾,数据排队。基本上是新产品(“名称”);将最终插入数据并返回ID。
 class collection {
     protected $filters = array('ids' => array(), 'published' => true, 'name' => '');
     protected $records = array();
     public function __construct($filters) {
         // validate $filters content here
         $this->filters = array_merge($this->filters, $filters);
         $query = $this->generateQueryUsing($this->filters);
         $pdos = $pdo->query($query);

         foreach($pdos->fetch(PDO::FETCH_CLASS, 'Record', array(NULL, FALSE)) AS $item)
            $this->records[] = $item;

         foreach($pdos->fetch() AS $item)
            $this->records[] = new Record($item, FALSE); // Record::__construct($data, $is_new = TRUE)


     }
 }