PHP:类范围 - 外部类最佳实践?

时间:2014-01-20 14:47:49

标签: php class scope

我对课程很陌生。

我正在使用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();

系统显然比这复杂得多。这篇文章中的例子只是一个例子来说明我的观点

感谢您的时间。

1 个答案:

答案 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类的所有子类中访问(如果你想扩展这个类)