PHP中的微小ORM问题

时间:2012-12-15 12:09:01

标签: php static

我正在尝试构建一个模型将扩展的小型ORM类,例如,如果我调用方法User::find(1),它将给我“用户”#39;在数据库中具有id 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而且它什么都不读。所以查询没有被执行,只返回错误。

我做错了什么?

1 个答案:

答案 0 :(得分:0)

将代码中的self更改为static。请注意,它只能在php> = 5.3中使用。 Read more about late static binding