PHP 中的小 ORM 问题



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

这是我的尝试:

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,也不会读取任何内容。因此,查询执行不正常,只返回错误。

我做错了什么?

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

最新更新