0

これが小さな例です。各関数内で初期化せずに、このクラスの他の多くのメソッドでmongodbオブジェクトを再利用したいと思います。

それとも、一般的にもっと良いアプローチがありますか?

 <?php
class Model_Users extends Model 
{

    public static function _init()
    {
        $mongodb = \Mongo_Db::instance('content');
    }


    public static function get_user($name)
    {

        $user = $mongodb->get('users', array( 'name' => $name ));

        return  $user; 
    }


}
4

3 に答える 3

1

このようなものはどうですか?PHP はおそらくコンパイルされないことに注意してください。私の投稿の主旨は、モデル オブジェクトはデータベース オブジェクトではないということです。ほとんどのモデル/DAO/ActiveRecord/あらゆるクラスが必要とする基本的な機能を提供する別個のデータベース オブジェクトを作成します。次に、モデルをデータベース コードではなく、ビジネス ロジックに集中させます。後で Mongo から他のデータベースに切り替える必要がある場合は、データベース固有のコードをすべて 1 か所にカプセル化しているため、簡単に切り替えることができます。

それで、次のようなもの。私の投稿は言語ではなく、デザインに関するものです。

class Db {
    private static $mongoDb;
    public static function _init() {
        self::$mongoDb = \Mongo_Db::instance( 'content' );
    }
    public static function getValue( $table, $name ) {
        $value = "";
        return self::$mongoDb->get( $table, array( "name", $name ) );
    }
}

class Model_Users extends Model {
    private $db;
    public static function _init() {
        $this->db = new Db();
    }
    public static function getUser( $name ) {
        return $this->db->getValue( "users", $name );
    }
}
于 2012-06-20T20:23:09.823 に答える
1

次のようにします。

class Model_Users extends Model 
{
    private static $mongodb;

    public static function _init()
    {
        self::$mongodb = \Mongo_Db::instance('content');
    }


    public static function get_user($name)
    {

        $user = self::$mongodb->get('users', array( 'name' => $name ));

        return  $user; 
    }


}

このようにして、クラス内のすべてのメソッドで使用するオブジェクトを作成しています。

于 2012-06-20T18:59:51.597 に答える
0

それが を使用する目的だと思います$this。オブジェクトの残りの部分から物事にアクセスできるようにします。

<?php
class Model_Users extends Model 
{

    private $mongodb;

    public static function _init()
    {
        $this->mongodb = \Mongo_Db::instance('content');
    }

    public static function get_user($name)
    {

        $user = $this->mongodb->get('users', array( 'name' => $name ));

        return  $user; 
    }
}
于 2012-06-20T18:58:13.373 に答える