PHP:类范围-外部类最佳实践?
我是个新手 我正在使用PDO连接,到目前为止一切正常。我可以登录/注销,在屏幕上显示用户信息。所有更新、插入等所有工作。我有一个关于我的网站结构的一般查询,然后我再进一步 我的主要问题是 将我需要的变量传递到我调用的方法中是否更好(大多数使用user\u id,因此我在大多数方法调用中调用$user->user\u id),但是我应该如何联系外部方法,例如来自$user对象的方法 还是在创建新的$task对象时传递$user对象更好 请参见下面的代码片段和示例 我不想从头开始,所以扩展BaseModel将是我在这个项目上的前进方向 我有一个类似的设置如下PHP:类范围-外部类最佳实践?,php,class,scope,Php,Class,Scope,我是个新手 我正在使用PDO连接,到目前为止一切正常。我可以登录/注销,在屏幕上显示用户信息。所有更新、插入等所有工作。我有一个关于我的网站结构的一般查询,然后我再进一步 我的主要问题是 将我需要的变量传递到我调用的方法中是否更好(大多数使用user\u id,因此我在大多数方法调用中调用$user->user\u id),但是我应该如何联系外部方法,例如来自$user对象的方法 还是在创建新的$task对象时传递$user对象更好 请参见下面的代码片段和示例 我不想从头开始,所以扩展BaseM
//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的头(“位置:…”),我可以在方法调用中包含用户id
$task -> redirect($user -> user_id, "newloc.php")
这会将用户转发到请求的页面,并使用用户id将其记录到数据库中(在开发模式下可以消除过多的页面循环)
显然这很简单,但是如果我想在$task类中直接与$user类通信呢?我发现我可以创建一个传递$user对象的$task对象
$task = new Task($user);
在我的测试中,我发现我可以访问$user数据和方法(例如$this->user->user\u id),并允许我访问其中的方法
(注意:我不记录用户重定向。这是我能想到的最简单的例子)
这个系统显然比这复杂得多。这篇文章中的例子只是一个让我明白我观点的例子
谢谢您的时间。您可以在
任务类中使用受保护的类属性,如$\u user
,如下所示:
class Task extends BaseModel
{
protected $_user;
public function __construct(User $user)
{
$this->_user = $user;
}
}
public function getUser()
{
return $this->_user;
}
$this->getUser()->userMethod(); // this is a method in User class
并添加此属性的getter方法,如下所示:
class Task extends BaseModel
{
protected $_user;
public function __construct(User $user)
{
$this->_user = $user;
}
}
public function getUser()
{
return $this->_user;
}
$this->getUser()->userMethod(); // this is a method in User class
因此,您可以在Task
类中使用User
类方法,如下所示:
class Task extends BaseModel
{
protected $_user;
public function __construct(User $user)
{
$this->_user = $user;
}
}
public function getUser()
{
return $this->_user;
}
$this->getUser()->userMethod(); // this is a method in User class
注意:我声明$_user受保护
而非私有
,因为它可以在任务
类的所有子类中访问(如果您想扩展该类)欢迎。我感谢您为编写“完整“问题。但是你可能想突出你的实际问题,或者删除不相关的代码,以鼓励人们阅读到最后。谢谢,@Zsolt Szilagy我已经将问题移到了帖子的顶部,并清楚地标记了它。代码片段现在可以由回答者自行阅读了。”