0

必要に応じて拡張される抽象クラスを使用して、データベースからオブジェクトにデータをロードする自動メカニズムを作成しようとしています。

これが私の単純化されたアイデアであり、現時点では機能していません。誰かがなぜ私が間違っていたのかを説明できれば:

抽象クラス:

abstract class abstractRecord{

    public $data = array();

    public function __constructor($id = null){
        global $db; // eg. PDO
        $this->db = $db;


        if(!is_null($id) && intval($id) > 0)
            $this->fillData($id);

    }

    public function fillData($id){

        $this->data = $db->getAll("SELECT * FROM ".self::$table." WHERE ".self::$id."='$id'");

    }

}

abstratRecord を拡張し、有効な ID が提供された場合、データを埋めるために開始時に抽象のコンストラクターを使用する必要があるいくつかのクラス

class User extends abstractRecord{

    public static $id = "`id`";
    public static $table = "`users`";

    // some other functions for controlling user...


}

そして最後の使い方

$user = new User(15);  // so user data from db with id=15 should be loaded into object data property by abstractRecord class

したがって、これは単純なバージョンであり、より多くの検証、ゲッター セッター インターフェイスが必要です ....

今のところ、ここで何が間違っているのか、その理由を知りたいだけです。この場合、クラスが抽象 __constructor を拡張する必要があることを知っている限り、parent::__constructor() を呼び出さずにこのフローを使用することは可能ですか? ?

4

2 に答える 2

2

抽象クラスのコンストラクター メソッドのスペルが間違っています。である必要があります__construct()。次に、次のように拡張クラスでそのコンストラクターを呼び出す必要があります。

class User extends abstractRecord{
    public function __construct() {
        // call to abstractRecore construct
        parent::__construct();
    }
}
于 2013-02-19T21:02:24.817 に答える
0

問題を解決し、動作メカニズムをセットアップできたので、次のようになります。

抽象クラスabstractRecord{

protected $data = array();
public static $table;
public static $pK;

public function __construct($id = null, $table = false, $pK = false){

if($table == false || $pK == false)
    return false;

self::$table = $table;
self::$pK = $pK;

if (!is_null($id) && intval($id) > 0)
        $this->fillData($id);

}

protected function fillData($id){
    global $db; // db solution

    $this->data = $db->("SELECT * FROM ".self::$table." WHERE ".self::$pK."='$id' LIMIT 1");

}

// some other useful functions

}

いくつかのクラス

クラスユーザーはabstractRecordを拡張します{

public static $table =  " `users` ";
public static $pK = " `userID` ";

public function __construct($id = null){

    parent::__construct($id, self::$table, self::$pK);
}

// some other functions ...

}

誤字脱字あったらごめんなさい…

助けてくれてありがとう!

于 2013-02-20T00:35:30.963 に答える