如何从类初始化引用对象实例


How do I reference an object instance from a class initialization?

这里有一个小例子。我想在此类的许多其他方法中重用 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; 
    }
}