0

現時点では、mysqli_fetch_object('ModelClass') を使用して、すべてのクエリ結果でクラスをインスタンス化していますが、すべての「ビジネス」ロジックを model_class 内に保持したいと考えています。

私は試した...

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();

その方法は少しおかしなようです。基本的に、そこでクラスを 2 回インスタンス化しています。

結果を配列として返し、各メンバー変数を格納することもできます...

クラス内のクエリ結果をメンバー変数に格納する別の/より良い方法はありますか?

php mysqli_fetch_object

4

2 に答える 2

0

結果を別のクラスとして単一のメンバー変数に格納できます。

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>
于 2013-09-20T16:32:16.940 に答える
0

インスタンス化しようとしているオブジェクト内にインスタンス化ロジックを含めたい理由がわからないと思います。本質的に、実装しようとしているのはファクトリ パターンです。そのようなオブジェクトをインスタンス化するためのファクトリとして機能するクラスを構築する方がよいと思います。インスタンス化ロジック (つまり、MySQL の対話) は、そのファクトリで実行できます。使用法は次のようになります。

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

同じ正確なメソッドを使用したい場合は、このファクトリを使用して、任意の種類のクラス (ModelClass 以外のクラスも含む) をインスタンス化できます。この方法でインスタンス化する可能性があるすべてのクラスに SQL 対話を配置する理由はありません。

于 2013-09-20T16:38:03.647 に答える