如何在不同脚本中的两个类中维护$ this引用?

时间:2009-08-13 05:40:28

标签: php model-view-controller oop

好吧,这有点奇怪,但情况如下:

我正在使用MVC上下文

我有一个用作库的User类(User.php)

然后我有一个控制器类来处理来自用户的输入(controller.php)

这是怎么回事:

  1. 用户注册
  2. 在控制器中调用registerhandler()
  3. registerhandler()调用User class
  4. 中的register()方法
  5. register()方法使用$ this创建一个User实例,并返回一个令牌并回显链接到控制器类中的verifyhandler()的消息
  6. verifyhandler调用User class
  7. 中的verify()方法
  8. verify()方法使用$ this来引用register()
  9. 创建的User实例
  10. 热潮! $ this不再指向同一个对象(由register()方法创建)!
  11. 我想维护该引用,但是一旦传递给控制器​​,它似乎会占用另一个值。我该怎么办呢?

1 个答案:

答案 0 :(得分:2)

$this始终指向它所使用的类实例。所以你的控制器中的$this和你的图书馆总会指向不同的东西,你几乎无能为力。

您可以做的是更改它接受您要使用的参数的寄存器功能的定义,并引用此参数而不是使用$this。另一个选项是在类中定义一个字段并使用该字段作为参考,这样所有类方法都可以在同一个对象上工作。

我认为这不是你想要达到的目标。

class UserController {
    // User library instance
    private $User = new User();

    private $token = null;

    public function registerhandler() {
        $this->token = $this->User->register();
    }

    private function verifyhandler() {
        $valid = $this->User->verify($this->token);
        ...
    }
}

class User {
    private $sharedData;
    public function register() {
        // register all common data in $sharedData property
        ...
        return $token;
    }

    public function verify($token) {
        // use shared data and method input to verify the data
        ...
        return true;
    }
}