即時通訊實驗用一些方法從我的數據庫檢索數據。 我做了一個抽象類(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
)
只是出於好奇,我測試過你在[PHP 5.4.4(http://ideone.com/0OEZ9w)(至少我試圖重新組合代碼它:D) – dbf 2013-04-21 21:26:46