0

モデルが拡張される小さなORMクラスを構築しようとしています。たとえば、メソッドを呼び出すと、データベースにUser::find(1)ある「ユーザー」モデルが得られます。id1

これは私の試みです:

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 に答える