PHP实体类示例

PHP实体类示例,php,model-view-controller,entity,Php,Model View Controller,Entity,我一直在试图找到一个实体类的例子,以确保我应该在其中放入什么。有人能给med举个这样一个班级的例子吗 这个对象是否应该只包含数据,就像我可以简单地使用StdClass对象一样? 或者它也应该包含我的CRUD方法?(创建、读取、更新、删除) 为数据库或模型中的每一行创建实体类实例是一种好方法,还是应该使用一个实体类并将所有不同的行保存在实体类的数组属性中 正如一位评论者所指出的,使用MVC框架将是简化工作的最佳方式。或者使用Doctrine2(一种ORM)的ad列表(它将PHP类映射到数据库表,并

我一直在试图找到一个实体类的例子,以确保我应该在其中放入什么。有人能给med举个这样一个班级的例子吗

  • 这个对象是否应该只包含数据,就像我可以简单地使用StdClass对象一样? 或者它也应该包含我的CRUD方法?(创建、读取、更新、删除)

  • 为数据库或模型中的每一行创建实体类实例是一种好方法,还是应该使用一个实体类并将所有不同的行保存在实体类的数组属性中


  • 正如一位评论者所指出的,使用MVC框架将是简化工作的最佳方式。或者使用Doctrine2(一种ORM)的ad列表(它将PHP类映射到数据库表,并为您执行所有查询)

    但要回答你的问题:

  • 对于每个实体(表),它应该是不同的类。它应该包含ad list CRUD方法,但可以包含其他与数据相关的方法(“Article”实体可以包含getBodyLinks()方法,该方法将解析主体并返回所有URL

  • 每个实体都是一个实体。如果出于某种原因不希望对象实例的负载在周围浮动,那么应该比实体更“低级”

  • Symfony2+Doctrine2示例:


    (这只是我在github上发现的一些随机回购)

    在我的上一个项目中,我将实体和映射器分离开来(CRUD操作),所以看起来像这样:

    实体

    Class PostEntity
    {
        public $title;
        public $text;
    }
    
    $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
    
    映射器

    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个实体

    Class PostEntity
    {
        public $title;
        public $text;
    }
    
    $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>";
    }
    
    $postMapper=新的postMapper();
    $posts=$postMapper->loadAllFromCategory(2);//从Category_id=1的数据库加载
    foreach($posts作为$post){
    回显“$post->title.”;
    }
    

    因此,在我的示例中,Entity是变量(数据库表中的列)和setter/getter(可选)的“愚蠢”集合,而Mapper执行所有数据库工作(CRUD)。如果我想更改映射器以从外部XML获取结果,我只需创建PostMapperXml类来从XML加载数据。

    MVC可能是一种更好的方法。请看,它是一个非常强大的MVC结构化框架。@Sune,这取决于您的确切目标。我倾向于使用,它由你真的不应该把实体和持久性逻辑混在一起,否则你就会变成反模式。