2013-02-19 23 views
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並應在抽象的開始使用構造函數,如果有效身份證件提供

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 

所以這只是簡單的版本,應該有更多的驗證,干將制定者接口....

現在只想知道這裏爲什麼是錯誤的,而且是有可能在不調用parent :: __ constructor()的情況下使用這個流程,據我所知在這種情況下類應該擴展抽象__constructor,或者我錯了?

回答

2

您的抽象類的構造方法拼錯了。需要是__construct()。然後,你需要調用構造函數在擴展類,如下所示:

class User extends abstractRecord{ 
    public function __construct() { 
     // call to abstractRecore construct 
     parent::__construct(); 
    } 
} 
+0

啊,是的,解決了一些問題,現在即時通過抽象類訪問在子類中定義的屬性的問題,這是非常關鍵的functionallity,所以如果我定義公共靜態$ table =「table_name」我需要能夠在抽象類中使用這個屬性... – devilsreject 2013-02-19 21:46:48

+1

這似乎是另一個問題,這個似乎解決了。 – Timmetje 2013-02-20 11:12:27

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 

}

一些類

CLA SS用戶擴展abstractRecord {

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

public function __construct($id = null){ 

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

// some other functions ... 

}

對不起,如果一些拼寫錯誤......

感謝幫助!