Php 在_construct()函数中写入插入查询

Php 在_construct()函数中写入插入查询,php,mysql,oop,Php,Mysql,Oop,我有一个插入查询(用于增加每个帖子的浏览次数)。现在我想知道,在\uu construct()中编写该查询是正常的事情吗?还不错吧?(因为我在某个地方读到这不是一个好主意) 这取决于创建此类实例的方式。因为你想跟踪你博客文章的浏览量,你需要确保以下几点- 如果查看博客文章,则仅为每个用户创建此类的一个实例 创建同一类的多个实例将导致跟踪错误的编号 您还可以在将数据插入数据库之前进行检查,无论数据是否已被跟踪 是的,这个类只有一个实例。另外,在post_id和username上都有一个独特的组,可

我有一个插入查询(用于增加每个帖子的浏览次数)。现在我想知道,在
\uu construct()
中编写该查询是正常的事情吗?还不错吧?(因为我在某个地方读到这不是一个好主意)


这取决于创建此类实例的方式。因为你想跟踪你博客文章的浏览量,你需要确保以下几点-

  • 如果查看博客文章,则仅为每个用户创建此类的一个实例
  • 创建同一类的多个实例将导致跟踪错误的编号

  • 您还可以在将数据插入数据库之前进行检查,无论数据是否已被跟踪


  • 是的,这个类只有一个实例。另外,在
    post_id
    username
    上都有一个独特的组,可以防止重复查看的行。仅为了代码组织,您可能需要在类内部创建一个私有函数来执行查询。同意吗@BrandonWhite@BrandonWhite为什么?在这种情况下,OP必须在每次获得该类的实例后执行该方法。但是将
    INSERT
    查询放入
    \u construct()
    会使它(查询)永远自动执行。@Shafizadeh这只是假设查询是构造函数中唯一发生的事情。如果不止一个手术正在进行,它可能会变得忙碌。良好的组织是今后编辑的关键。我懒得写答案,但我可以证实这是一个可怕的想法。阅读关于在构造函数中工作、单一责任原则和实体的内容。@plalx请(如果可以)写一个答案并解释更多内容。我也想知道你的解决方案。thanks@Shafizadeh简言之,日志视图是一个交叉关注点,应该在它所应用的特定工作流的服务边界处进行处理。如果有一个应用程序层,那么它就会去那里。如果MVC控制器充当应用程序层,那么这就是它应该去的地方。这够清楚吗?
    class classname {
    
        private $post_id;
        public function __construct($post_id) {
    
            $this->post_id = $post_id;
    
            INSERT IGNORE INTO viewed (post_id, username) 
                               VALUES ($this->post_id, $_SESSION['username']);
        }
    
    }