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

做这样的事情:

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 回答
1

这样的事情怎么样?注意,PHP 可能无法编译。我的帖子的主旨是您的模型对象不是数据库对象。创建一个独立的数据库对象,并提供大多数模型/DAO/ActiveRecord/任何类所需的基本功能。然后让你的模型专注于业务逻辑,而不是数据库代码。您可能会发现,如果您以后需要从 Mongo 切换到其他数据库,这会更容易,因为您已将所有数据库特定代码封装到一个地方。

因此,类似于以下内容。我的帖子是关于设计的,而不是语言。

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 回答
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 回答