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

时间:2012-06-20 18:36:48

标签: php

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


}

3 个答案:

答案 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; 
    }
}