2014-03-26 96 views
-1

我有類:PHP fetch_object繼承

class item{ 
    public id=''; 
    public name=''; 
} 

這個類,我想有一個與值從MySQL查詢 填補了類這樣的函數內部:

$result_item = $this->mysqli->query("SELECT * 
      FROM items 
      WHERE item_id=".$item_id." 
      LIMIT 1"); 
$res = $result_item->fetch_object(SalesOrderItem); 
$this = $res; 

這個代碼不工作,但有沒有辦法做到這一點?

+0

'SalesOrderItem'不是'item'。另外:您錯過了報價 – TimWolla

+0

致命錯誤:無法在第39行的Z:\ home \ krumaninside \ www \ ordering \ includes \ classes \ sales_order_item.class.php中重新分配$ this。 – AnKing

+1

@AnKing爲什麼要嘗試分配一個值到'$ this'?這沒有意義。 –

回答

1

你需要看看mysqli :: fetch_object的文檔。

你的類名需要被指定爲像這樣的字符串:

$result_item->fetch_object('SalesOrderItem'); // or 'item' your question is inconsistent here 

您可能還需要一些值傳遞給構造沿幫助你。我強烈建議閱讀文檔頁面上的用戶註釋 - http://us3.php.net/manual/en/mysqli-result.fetch-object.php,以獲得比主要文檔本身更好的使用示例。

您在評論中提到的致命錯誤是因爲您無法更改$this。這是對當前對象實例的內部引用。試圖改變它是沒有意義的。

如果你的意圖是你有一個對象類,本質上是它自己的對象關係映射器(ORM)。到它調用數據庫的地方,從記錄中填充屬性並以某種方式將它自己變成另一個類,這是不可能的。你可能需要做的是利用排序工廠模式來創建一個類,它除了使用ORM方法實例化給定類的類之外,什麼也不做。

所以也許用法是這樣的:

// The class with MySQLi logic could be called something like MysqlObjectfactory 
// It could take input like an instantiated mysqli object, DB table name, 
// the class name you are trying to map to, and the id for the specific item in the class you are looking for 
// it would use the logic noted above to generate an object with the specifications given 
// and return it to the caller 
$object = MysqliObjectFactory::getObject($mysqli, $db_table, $class_name, $id); 

是跳到我腦海中的其他想法是:爲什麼另起爐竈?這聽起來像你正在尋找的是一個對象關係映射器。 PHP中有幾種被廣泛使用:Doctrine,Propel,PHP Active Record等。你可能會檢查這些,因爲它們會給你提供更多的功能性/靈活性,而不是試圖用mysqli::fetch_object()來做到這一點,在數據庫字段(或在SQL中提供的別名)與類屬性名稱完全匹配(不需要在類構造函數中進行映射)。

+0

出現了我之前指定的致命錯誤 – AnKing

+0

@AnKing查看更新後的答案。 –

+0

有沒有一種方法可以將mysql結果中的屬性複製到主類中? – AnKing