我对课程很陌生。
我正在使用PDO连接,到目前为止一切都很顺利。我可以登录/注销,在屏幕上显示用户信息。所有更新插入等所有工作。在进一步讨论之前,我对我网站的结构进行了一般性查询。
我的主要问题是,
将我需要的变量传递给我调用的方法是否更好(大多数使用user_id,因此我会在大多数方法调用中调用$ user - > user_id),但是我应该如何联系外部方法,如来自$ user对象的方法?
或者在创建新的$ task对象时传递$ user对象是否更好?
请参阅下面的代码段和示例
我不想从头开始,所以扩展BaseModel将成为我这个项目的前进方向......
我有类似下面的设置;
//main class
class BaseModel(){
//configure db here $db
//subclasses can use as self:$db
//there is if($db doesnt exist).. to stop multiple connection threads being
//created when multiple objects are created.
}
//...and I have 2 subclasses
class User Extends BaseModel
//create new user object, confirm login details (cookie, ip etc)
//returns user object as array.
}
class Tasks Extends BaseModel
//do various cleanup tasks
}
在主脚本中,我创建了每个的新实例:
$user = new User();
$task = new Task();
如果我想调用重定向任务(PHP的标题(“位置:...)”,我可以在方法调用中包含user_id;
$task -> redirect($user -> user_id, "newloc.php")
这会将用户转发到请求的页面,并使用用户ID将其记录在数据库中(在开发模式下有用以消除过多的页面循环)。
显然这很简单,但是如果我想直接在$ task类中与$ user类进行通信呢?我发现我可以创建一个传递$ user对象的$ task对象;
$task = new Task($user);
在我的测试中,我发现我可以访问$ user数据和方法(例如$ this - > user-> user_id),并允许我访问那里的方法,例如;
(注意:我不记录用户重定向。这是我能想到的最简单的例子);
$task -> redirect("newurl.php");
//within redirect
public function redirect($url){
$this -> user -> increaseTotalRedirects();
系统显然比这复杂得多。这篇文章中的例子只是一个例子来说明我的观点
感谢您的时间。
答案 0 :(得分:1)
您可以在$_user
类中使用受保护的类属性,例如Task
,如下所示:
class Task extends BaseModel
{
protected $_user;
public function __construct(User $user)
{
$this->_user = $user;
}
}
并添加此属性的getter方法,如下所示:
public function getUser()
{
return $this->_user;
}
因此您可以在User
类中使用Task
类方法,如下所示:
$this->getUser()->userMethod(); // this is a method in User class
注意:我声明了$ _user protected
而不是private
,因为它可以在Task
类的所有子类中访问(如果你想扩展这个类)