这是一个小例子。我想在这个类中的许多其他方法中重用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;
}
}
答案 0 :(得分: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;
}
}
这样你就可以在类中的每个方法中创建对象。
答案 1 :(得分: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 );
}
}
答案 2 :(得分: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;
}
}