这可能是由于我对 PHP 面向对象模型的理解存在差距,但请耐心等待,看看您是否发现它有任何意义/任何明显的错误。无论如何,在 MVC 应用程序中,我有两个控制器,Post.php
并且Thread.php
. 在Thread
控制器中,我有一个public
方法mark_as_read()
,你可以猜到。它将线程标记为已读(在 DB 中插入行)或更新数据库中最后一个视图的时间。在Thread
控制器中,我可以通过以下方式轻松调用它:
$this->mark_as_read($user_id, $thread_id);
但是,在Post
控制器中,我还希望能够将线程标记为已读,特别是当我发布新帖子并且我不希望数据库反映用户尚未阅读他们自己的“新”帖子时。第一个问题:如何mark_as_read()
从 post 控制器调用线程上的方法?
无论如何,我以一种直觉上对我来说似乎非常糟糕的方式修补并解决了这个问题。有一个Base
控制器,控制器Post
和Thread
控制器都继承自。我将该mark_as_read()
方法移动到基本控制器中,现在我可以通过调用相同的方法将线程标记为已读:
$this->mark_as_read($user_id, $thread_id);
来自任何控制器!这对我来说似乎真的很糟糕的原因是因为我有其他控制器我不确定我是否真的想将线程标记为已读,并且本能地感觉它不属于那里。我很确定我做错了......所以问题二:我如何以“正确”的方式做到这一点?我正在使用 Laravel 3 ( http://laravel.com/ ) 但这似乎是一个一般的 OO PHP 问题,并不特定于框架。