0

我正在尝试构建一个模型将扩展的微型 ORM 类,例如,如果我调用该方法User::find(1),它将为我提供数据库中具有idof的“用户”模型1

这是我的尝试:

class ORM
{
    private static $table, $database;

    function __construct() {
        self::getConnection();
    }

    private static function getConnection (){
        require_once('Database.php');
        error_log('Getting connection');
        self::$database = Database::getConnection(DB_PROVIDER, DB_HOST, DB_USER, DB_PASSWORD, DB_DB);
    }

    public static function find($id) {
        $obj = null;
        self::getConnection();
        $query = "SELECT * FROM ? WHERE id = ?";
        $results = self::$database->execute($query,null,array(self::$table,$id));
        print_r();
        if ($results){
            $obj = new self($results);
        }
        return $obj;
    }
}

然后,以班级User为例。

include('ORM.php');
include('../../config.php');

class User extends ORM
{
    public $id, $name;
    private static $table = 'user';

    public function __construct($data){
        parent::__construct();
        if ($data && sizeof($data)) { $this->populateFromRow($data); }
    }

    public function populateFromRow($data){
        $this->id = isset($data['id']) ? intval($data['id']) : null;
        $this->name = isset($data['name']) ? $data['name'] : null;
    }
}

print_r(User::find(1));

我把那些包含和那个 print_r 只是为了测试,之后它不会保留在那里。

问题是该方法find似乎没有$table从类中读取,也没有读取任何内容。所以查询没有很好地执行,只返回一个错误。

我究竟做错了什么?

4

1 回答 1

0

self将您的代码更改为static. 请注意,它仅适用于 php >= 5.3。阅读有关后期静态绑定的更多信息

于 2012-12-15T12:18:35.300 回答