这里有一个小例子。我想在此类的许多其他方法中重用 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;
}
}
做这样的事情:
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;
}
}
这样,您就可以创建用于类中每个方法的对象。
这样的事情怎么样? 请注意,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 );
}
}
我相信
这就是使用$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;
}
}