2013-04-21 74 views
0

即時通訊實驗用一些方法從我的數據庫檢索數據。 我做了一個抽象類(ppdao),在這個類中,我有一個函數可以根據表名構建選擇查詢,並將結果轉換爲對象。PHP如何獲得實例化的類名

對於每個表我做一個小文件,如:

class user extends ppdao{ 

public $table = 'user';  

public function __set ($name, $value){ 
    $this->$name = $value; 
} 

public function __get ($name){ 
    return $this->$name; 
} 

可以說,我想在陣列中的所有用戶對象,我使用下面的函數從我ppdao類:

public static function get_ar_obj($arWhere = array() , $arWhereWay = array(), $order = null){     
    $class = get_called_class(); 

    $obj = new $class();  
    $sql = "SELECT * FROM ".$obj->table. $obj->arWheretoString($arWhere); 
    $res = mysqli_conn::getinstance()->query($sql)->all_assoc();   
    return $obj->createObjects($res); 
} 

這工作一切正常,它給了我想要的結果。

現在我改變了__get功能有點成這樣:

public function __get ($name){   
     switch ($name){ 
     case 'oAlbums': 
      return $this->oAlbums = albums::get_ar_obj($arWhere = array('user_id' => $this->id)); 
     break; 

     default: 
     return $this->$name; 
     break; 
} 

我以爲我想要得到的所有專輯用戶擁有,專輯中的桌子上有一個叫user_id的領域,所以我想我」 d像這樣將m鏈接在一起。

現在,當我打電話專輯類是這樣的:

$userobject->oAlbums 

get_called_class()依然採用的用戶類別名稱,而不是所謂的專輯類的,因此其產生像

SELECT * FROM user WHERE user_id = 63 

And it should be SELECT * FROM album WHERE user_id = 63 
查詢

任何人有任何想法如何我可以得到這個工作?


對不起人們,它不使用get_called_class創建查詢,它使用公共$表。得到它通過改變其進入get_called_class變量

這就是現在的工作是結果:

$arUser = user::get_ar_obj($arWhere = array('id' => 1)); 
$oUser = $arUser[0]; 

echo '<pre>'; 
    print_r($oUser->oAlbums); 
echo '</pre>'; 

輸出:

Array 
(
    [0] => album Object 
     (
      [table] => album 
      [data:ppdao:private] => 
      [className:ppdao:private] => album 
      [id] => 2 
      [name] => My new album 1 
      [slug] => my-new-album-1 
      [user_id] => 1 
      [views] => 0 
      [datecreated] => 2013/03/23 16:00:43 
      [location] => Muaha 
     ) 
+0

只是出於好奇,我測試過你在[PHP 5.4.4(http://ideone.com/0OEZ9w)(至少我試圖重新組合代碼它:D) – dbf 2013-04-21 21:26:46

回答

0

你吃過看看static關鍵字?它將在PHP5工作> = 5.3

public static function get_ar_obj($arWhere = array() , $arWhereWay = array(), $order = null){     
    $obj = new static();  

    $sql = "SELECT * FROM ".$obj->table. $obj->arWheretoString($arWhere); 
    $res = mysqli_conn::getinstance()->query($sql)->all_assoc();   
    return $obj->createObjects($res); 
} 
+0

嘿酷不知道!奇蹟般有效! – 2013-04-22 05:10:52