2009-08-13 7 views
0
OK

が、それは少し奇妙だが、ここの状況だ:

私はMVCのコンテキストで働いています

は、私がライブラリとして使用Userクラスを持っている(User.php)

、その後、私が持っていますユーザー(controller.php)

からの入力を処理するコントローラクラスは、ここにそれが行く方法は次のとおりです。

  1. ユーザーが
  2. を登録します
  3. registerhandler()はregisterhandler()レジスタ()を呼び出してユーザクラスにおけるメソッド
  4. レジスタ()メソッドは、($これでユーザーインスタンスを作成し、トークンを返し、verifyhandlerにリンクメッセージをエコー
  5. コントローラで呼び出されます)
  6. )の呼び出しを検証()Userクラスのメソッド
  7. 検証()メソッドは、レジスタ(によって作成されたユーザーインスタンスを参照するために$これを使用していますverifyhandler
  8. コントローラクラスでブーム! $ thisはregister()メソッドで作成された同じオブジェクトを指していません!

は、私はそれは、コントローラに渡された後、別の値を取るように見える、まだその参照を維持したいです。それについて私は何ができますか?

+0

いくつかのコードサンプルを投稿できますか?オブジェクトを参照渡ししようとしましたか?関数foo(&$ var)と関数foo($ var)? –

+0

私は現在コードを編集しているので、今は何も投稿できません。私はちょうど参照によってオブジェクトを渡すことに行くと思うが、それは大きな変更を意味するので、私は今これで$しようとしている。 –

答えて

2

$thisは、常に使用されるクラスインスタンスを指します。あなたのコントローラーには$thisなので、あなたのライブラリーは常に別のものを指していて、それについてはほとんどできません。

$thisの代わりに、作業するパラメータを受け入れてこのパラメータを参照するレジスタ関数の定義を変更することができます。もう1つの選択肢は、クラス内のフィールドを定義し、参照用にそのフィールドを使用することです。このようにして、すべてのクラスメソッドは同じオブジェクトで動作することができます。

私はこれが達成したいと思っています。

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; 
    } 
} 
+0

これは私が探している答えです...私はKohanaにフレームワークなしで作成された認証スクリプトを変換しようとしていたので、回避策に取り組んで時間を費やしていましたが、このpropblemが入りました。クラス全体を再現する。おかげでRaYell! –

+0

これが受け入れ可能な答えであれば、受け入れ目盛りをクリックしてください。 –

関連する問題