Php 如何使用mysqli函数将查询结果存储为类内的成员变量?

Php 如何使用mysqli函数将查询结果存储为类内的成员变量?,php,mysqli,Php,Mysqli,目前,我使用mysqli_fetch_对象('ModelClass')来实例化我的类和所有查询结果。。。但是我希望将我所有的“业务”逻辑都保存在model_类中 我试过 class ModelClass { function __construct($model_id) { if($model_id) { //query code goes here... return $mysqli_re

目前,我使用mysqli_fetch_对象('ModelClass')来实例化我的类和所有查询结果。。。但是我希望将我所有的“业务”逻辑都保存在model_类中

我试过

class ModelClass
{
    function __construct($model_id)
    {
         if($model_id)
         {
             //query code goes here...

             return $mysqli_result->mysqli_fetch_object('ModelClass',$model_id);
         }
    }
}

$model = new ModelClass();
这种方法似乎有点不可靠。本质上,我在那里实例化了两次这个类

我还可以将结果作为数组返回,然后循环存储每个成员变量

是否有其他/更好的方法将类内的查询结果存储到成员变量中


您可以将结果作为不同的类存储在单个成员变量中:

class ModelClass {
    public $result;
    function __construct($model_id)
    {
         if($model_id)
         {
             //query code goes here...

             $result = $mysqli_result->mysqli_fetch_object('ModelClassResult',$model_id);
         }
    }
}
然后你可以做:

$model = new ModelClass();
// Now access $model->result-><fieldname>
$model=newmodelclass();
//现在访问$model->result->

我想我不明白为什么要在试图实例化的对象中包含实例化逻辑。本质上,您试图实现的是工厂模式。我认为您最好构建一个类作为实例化此类对象的工厂。实例化逻辑(即MySQL交互)可以在该工厂中进行。用法可能如下所示:

$model_object = mysql_factory::instantiate('ModelClass', $model_id);

然后,如果您愿意使用相同的精确方法,您可以使用该工厂来实例化任何种类的类(甚至是ModelClass以外的类)。没有理由以这种方式将SQL交互应用到每个类中。

我以前没有使用过工厂模式,但对于我试图实现的目标来说,这似乎有点过头了。为什么Barmer的答案不是更好的解决方案呢?而且,我似乎找不到任何mysql的工厂模式解决方案。。。我可以找到“物体”的例子,比如汽车工厂等,这些对我来说是有意义的。我在构思“mysql_工厂”时遇到了困难,你能给我举个例子或者给我更好的解释一下吗。Thanks@payling假设您现在想要另一个类,而不是
ModelClass
,您想要以相同的方式实例化它。您是否打算在该类中添加重复代码,以拥有所有MySQL连接和对象获取逻辑,或者你打算重构它,将所有用于获取对象的MySQL逻辑放在一个处理这个问题的公共类中。@payling我认为第二个解决方案是最好的,就像你需要改变从数据库中检索对象的方式一样(假设您希望稍后更改数据库实现,或者希望添加在数据库前面实现缓存的功能),最好在一个地方更改此代码,而不是在多个类之间重复代码。OO设计的一个关键原则是,您希望您的类基本上只做一件专门的事情,而不是在多个类之间传播公共逻辑。@就MySQL的工厂模式而言,MySQL部分不是您需要做出的逻辑飞跃是对工厂模式的理解。一旦您了解到该模式为您提供了一个类来构建其他类对象,那么让该模式与MySQL协同工作只是一个实现细节。实现不一定需要比您目前在您的构造函数。您传入对象将被实例化到的类的名称以及要使用和返回对象的特定id值。