我對OOP PHP
相當陌生,在構建我的第一個項目時,我遇到了一些困難的難題。我應該創建一個對象還是使用數組?
我在試圖建立一個論壇。是的,我知道那裏有很多免費的東西,我只想根據自己的需要建立一個:)。另外,編碼很有趣。
我已經爲論壇,帖子和帖子構建了基本模型和控制器和模板。 基礎模型具有標準的數據庫功能,如查找所有,按ID查找等。各個模型擴展了模型類,並且只對該類具有特定的功能。 我已經設置它是這樣的:
不僅如此。很艱苦,我已經不得不做出對某些函數和變量是靜態或沒有決定。我有這樣的困境:
基本的增刪改查工作從基本模型。這很好,我可以通過從(基本)模型中調用靜態方法來創建,更新,刪除和讀取數據庫,這些方法實例化這些論壇,線程和發佈模型的對象。到現在爲止還挺好。在Model Class
的
部分:
<?php
/**
* Find rows from database based on sql statement
* @param string $sql
* @retun array $result_set
*/
static public function find_by_sql($sql = '') {
$db = Database::getInstance();
$mysqli = $db->getConnection();
$result = $mysqli->query($sql);
$object_array = array();
while ($record = $result->fetch_array()) {
$object_array[] = static::instantiate($record);
}
return $object_array;
}
private static function instantiate($record) {
$object = new static;
foreach ($record as $attribute => $value) {
if ($object->has_attritube($attribute)) {
$object->$attribute = $value;
}
}
return $object;
}
}
?>
我轉移這些對象在我的模板顯示。從一張桌子上看書時,效果很好。
<?php
$postcount = $pagination->offset + 1;
if (!empty($posts)) {
foreach ($posts as $post) {
?>
<div class="post">
<div class="posttime"><?php echo strftime("%A %e %B %G %H:%M", $post->date_line); ?></div>
<div class="postnumber">#<?php echo $postcount; ?></div>
<div class="postuser">
<div class="username"><?php echo $post->username; ?></div>
<div class="avatar">avatar</div>
</div>
<div class="postcontents">
<div class="posttext"><?php echo $post->pagetext; ?></div>
</div>
</div>
<?php
$postcount++;
}
?>
<div class="pagination"><?php echo $page_split; ?></div>
但是,爲了顯示線程中的所有帖子,我需要來自用戶表的信息,例如,有多項自己的職位,等級,分身等
好了,所以這裏的東西:
SELECT * FROM post
LEFT JOIN user ON (post.user_id = user.id)
where thread_id={$id}
ORDER BY date_line DESC
LIMIT {$offset} , {limit}
我現在有更多的領域那時,我已經安裝在我的崗位模型變量。所以他們不會被轉移顯示。
我應該使用數組來顯示這些額外的字段而不是對象嗎?我寧願仍然使用對象方法進行顯示,因爲我現在正在爲此進行設置。
或者我應該將這些用戶字段作爲變量添加到Post模型中?我認爲這並不是最簡單的方法,但它會起作用。
或者我應該通過foreach
循環來獲取(尚未創建)用戶類的單獨實例嗎?我認爲這會耗盡更多的內存,然後左連接,只是得到我需要的數據。
我想就如何解決這個問題提供一些提示。
靜態變量不是面向對象的範例的一部分。模型是一個圖層,而不是數據庫表的抽象。這也使「後期模型」變得毫無意義。 –
感謝您的評論。我試圖自己學習,所以我依賴於我在一些在線課程中學到的知識。我正試圖將我在這些事情上學到的東西結合起來。可能我沒有得到最好的信息。那麼你怎麼設置呢? – LvS