2011-07-01 13 views
2

ユーザーに関する情報を持つユーザークラスを作成しました。また、そのクラスをLoggedInUserという別のクラスで拡張しました。別のクラス内のクラスインスタンスの確認

がLoggedInUserのポイントは、単にこのようなLoggedInUserオブジェクトの存在を確認することで、ユーザが認証され、ログインしている場合は簡単に伝えることができるようにすることです:

class User { 
//properties 
} 

class LoggedInUser extends User { 
//some additional token stuff 
} 

$isLoggedIn = new LoggedInUser(); 

class Router { 
public function gotoRoute() { 
    if($isLoggedIn) { 
    // perform the action 
    } 
} 
} 

私の知る限り、 $ isLoggedInはクラスからアクセスできないので、コンストラクタに渡す必要がありますか?またはこれをすべて行うには良い方法がありますか?

+0

ところで、あなたは$ isLoggedInにオブジェクトを割り当てているので、常にTRUEに評価されないのだろうか? – Abhay

答えて

2

私の意見では、2つの選択肢があります。 Router::__construct()LoggedInUserを渡すことができます。それとも、Router::__construct()

第一オプションでLoggedInUserを作成することができます。

$LoggedInUser = new LoggedInUser(); 
$Router = new Router($LoggedInUser); 

第二オプション

$Router = new Router(); 

// in router class file 
__construct() { 
    $this->YourProperty = new LoggedInUser(); 
} 

私は第一のオプションが好き。 Dependency Injection

+0

チャールズさんに感謝します。私はオプション1に傾いています。セッションにauthIDを保存し、 ?それは悪い練習ですか? – Kristian

+0

必ずしも悪い習慣とは言いません。単純にクラスを使用すると、データベースに簡単に結びつけたり、クラス内にある種の状態チェックメソッドを組み込んで、すべてのセッションメソッドをカプセル化したりすることができます。フラットアウト '$ _SESSION ['authid']'を使うと、これらのタイプのことをする必要がある場合、簡単に「スパゲッティコード」に巻き込むことができます。私は可能な限りカプセル化が好きです。 – cspray

0

これはあなたが後になっているかどうかは完全にはわかりませんが、クラスがその存在を確認できるように$ isLoggedInをプライベート変数にするのはどうですか?

プライベート$ isLoggedIn =新しいLoggedInUser();

+0

私はあなたが何かになっていると思っています。私はあなたに戻ってきます。 – Kristian

0

まず、変数は常にクラスのロケールです。変数をクラス外に割り当ててから呼び出すことはできません。

このような単純なスクリプトでは、それは私がどうなるのかです:

class Router { 
    public function gotoRoute() { 
     $isLoggedIn = $isLoggedIn = new LoggedInUser(); 
     if($isLoggedIn instanceof User) { 
     // perform the action 
     } 
    } 
} 
関連する問題