我一直在试图找到一个实体类的例子,以确保我应该放入它。有人能给我一个关于这样一个班怎么样的例子吗?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