2016-05-11 1 views
0

私はここで不明です!コードを実行するとエラーNotice: Undefined variable: filterが出ます!Phalconフィルタを使用するときに未定義の変数を取得していますか?

しかし、私はpublic $filter行を宣言して削除すると、それは働いた!どうして ?

use Phalcon\Filter; 

class Auth extends Component { 
    public $filter;//remove this line is working 
    public function initialize() { 
     $this->db = $this->getDI()->getShared("db"); 
     $this->login_db = $this->getDI()->getShared("login_db"); 
     $this->filter = new Filter(); 
    } 
    public function auth($name) { 
    $name = $this->filter->sanitize($name,"string"); 
    } 

    } 
+0

ファイル全体を投稿し、クラスを呼び出す場所のコードを追加し、行番号とファイルなどのエラー全体を投稿できます – Brett

+0

'initialize'の前に' auth'を実行しているようですか? – yergo

答えて

3

私はsimple testを作成し、問題を再現しました。ここで何が起こるか説明しましょう。

  1. auth($name)Authクラスのコンストラクタです。はい、これはold constructor styleです。このメソッドは、オブジェクトの作成時に呼び出されます。オブジェクトが作成される前にinitialize()が呼び出されていないので、メソッドの前にコード$this->filter = new Filter();が呼び出されません。あなたが宣言public $filterをコメントアウトし、コンストラクタでプロパティにアクセスした場合

  2. は、マジック__get()方法は、親クラス\Phalcon\Di\Injectableから呼び出され、プロパティがfrom DI containerを撮影したものです。このため、エラーは表示されません。

  3. 、プロパティpublic $filterを指定してオブジェクトを作成する場合は、コンストラクタ(auth()法)initialize()メソッドの前に呼び出されるため、プロパティのみが定義されていますが、初期化されていません。この場合、エラーが発生します。

Fatal error: Call to a member function sanitize() on a non-object in /var/www/app/models/Auth.php on line 19

ご質問があれば私に教えてください。

関連する問題