1

私は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

4 に答える 4

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 );

基本的に、オブジェクト メソッド内からクラスを開始することは避けてください。これにより、保守やテストが不可能なコードが作成されます。特に、モック サービスを使用してインスタンスを「モック」する必要がある場合。デザインを再考することをお勧めします。あなたが持っているものは、時間の経過とともに臭いがするだけです.

于 2012-06-14T13:15:55.063 に答える
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
    }
}
于 2012-06-14T13:03:48.953 に答える
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();
?>

あなたのためにトリックを行う必要があります。

于 2012-06-14T13:07:31.760 に答える
0

オブジェクトをセッションに保存して、どこからでもアクセスできます。

于 2012-06-14T13:05:34.087 に答える