我一直在試圖找到一個實體類的例子,以確保我應該放入它。有人能給我一個關於這樣一個班怎麼樣的例子嗎?PHP實體類示例
該對象是否只包含數據,就像我可以簡單地使用StdClass對象? 還是應該包含我的CRUD方法呢? (創建,讀取,更新,刪除)
對於我的數據庫或模型中的每一行創建實體類的實例,還是應該使用一個實體類並保存全部實體類的數組屬性中的不同行?
我一直在試圖找到一個實體類的例子,以確保我應該放入它。有人能給我一個關於這樣一個班怎麼樣的例子嗎?PHP實體類示例
該對象是否只包含數據,就像我可以簡單地使用StdClass對象? 還是應該包含我的CRUD方法呢? (創建,讀取,更新,刪除)
對於我的數據庫或模型中的每一行創建實體類的實例,還是應該使用一個實體類並保存全部實體類的數組屬性中的不同行?
作爲一名評論者指出,使用MVC框架將是緩解事情的最佳方式。或使用Doctrine2的廣告列表 - 一個ORM(它將PHP類映射到數據庫表並執行所有查詢)。
但是,爲了回答你的questiosn:
應該爲每個實體(表)不同的類。應該contian 廣告列表 CRUD方法,但可以包含相關方法的其他數據(「條」實體可能包含getBodyLinks()方法,將解析身體,並返回所有的URL。
每個實體是...還有一個實體,如果你因爲某些原因不想對象實例的浮動你周圍的負載應該會更「低水平」比實體
的Symfony2 + Doctrine2例如:。
https://github.com/stfalcon/BlogBundle/blob/master/Entity/Post.php
(這只是一些隨機回購我在GitHub上找到)
在我的最後一個項目我分開實體和映射(CRUD操作),所以它看起來是這樣的:
實體
Class PostEntity
{
public $title;
public $text;
}
映射
Class PostMapper
{
public function load($id)
{
// load one record from Database where id = $id
}
public function save()
{
// insert new record or edit in Database
}
public function delete()
{
// delete from Database
}
}
用法 - 1實體
$postMapper = new PostMapper();
$post = $postMapper->load(1); // load from Database where post_id = 1
$post->title = "New title"; // set new post title
$postMapper->save($post); // edit post in Database
用法 - 主體多元化
$postMapper = new PostMapper();
$posts = $postMapper->loadAllFromCategory(2); // load from Database where cateogory_id = 1
foreach ($posts as $post) {
echo "<h3>" . $post->title . "</h3>";
}
所以,在我的例子實體是 「愚蠢」 的變量集合(從數據庫列表)和setters/getters(可選),而Mapper做所有的數據庫工作(CRUD)。如果我想更改映射器以從外部XML獲取結果,我只需創建類加載XML中的數據。
對於你想要做的事情,MVC可能是更好的方法。看看[Laravel](http://laravel.com/),這是一個非常強大的MVC結構化框架。 – Svenskunganka 2015-01-04 14:18:18
@Sune,這取決於你的確切目標是什麼。我傾向於使用[域對象](http://c2.com/cgi/wiki?DomainObject),它們由自定義編寫的[數據映射器](http://martinfowler.com/eaaCatalog/dataMapper.html)填充, 。你真的不應該將這些實體與持久化邏輯混合在一起,否則你最終會得到[active record](http://www.martinfowler.com/eaaCatalog/activeRecord.html)反模式。 – 2015-01-04 22:06:56