访问在另一个类中创建的类

时间:2012-06-14 13:00:47

标签: php oop

我的网页上有一个page课程。调用此方法时,会创建一个新的user。这允许我检查是否有用户登录。这是page类的构造方法:

public function __construct() {
    // check user is logged in
    require 'classes/user.class.php';
    $user = new user();
    if(!$user->isLoggedIn()) {
        // user is not logged in
        // load login page
    }
    else {
        // user is logged in
        // load requested page
    }
}

整个用户验证工作正常,但我现在想要访问在user构造期间创建的page对象。这是否与我正在处理事情的方式有关,如果是这样,我如何访问user对象?

4 个答案:

答案 0 :(得分:4)

说实话,这是一个很好的模拟设计。更好的是在页面上下文之外创建用户对象,然后在需要的地方“注入”它:

# page.php
class Page {
    # private $_user; # maybe ... probably not needed.
    public function __construct( User $user ) {
        if ( $user->isLoggedIn() ) { /* etc */ }
        # if this will be needed in other functions, save a copy of the
        # obj reference to as an object attribute:
        $this->_user = $user;
    }
}

# user.php
class User {
    public function isLoggedIn() { /* etc */ }
}

# request_controller.php
$user = new User();
$page = new Page( $user );

基本上,避免从对象方法内部启动类。这导致不可维护和不可测试的代码。特别是当你需要使用模拟服务“模拟”实例时。我建议你重新考虑一下这个设计,你所拥有的设计只会随着时间的推移变得更加嗅觉。

答案 1 :(得分:1)

我可以将user作为实例变量,然后使用关键字$this->

访问它

示例:

class Page {
    public $user; // private if you want to access it only within Page

    public function __contruct() {
        $this->user = new user();
        // rest of your code
    }
}

答案 2 :(得分:1)

<?php
require_once 'classes/user.class.php';
class page {
    private $myUser;

    public function __construct() {
        // check user is logged in

        $this->myUser = new user();
        if(!$this->myUser->isLoggedIn()) {
            // user is not logged in
            // load login page
        }
        else {
            // user is logged in
            // load requested page
        }       
    }

    public function getUser() {
        return $this->myUser;
    }
}

$p = new page();

$user = $p->getUser();
?>

应该为你做的伎俩。

答案 3 :(得分:0)

您可以将对象存储在会话中,然后在任何地方访问它。