我試圖建立一個微小的ORM類車型將延伸,從而,例如,如果我稱之爲User::find(1)
它會給我富人的1
的id
在數據庫中的「用戶」模型的方法。微小的ORM問題PHP
這是我的嘗試:
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
,它不會讀取任何內容。所以查詢不能很好地執行,只會返回一個錯誤。
我在做什麼錯?
另一種解決方案是不使用靜態方法和成員。這樣做的好處是您可以真正測試代碼,並且更靈活。 – hakre