2016-05-23 1 views
1

ここではOOPをよく理解できません。私が考えることは$ thisまたはthisはクラスの現在のインスタンスを指すために使用でき、すべての非静的メンバーにアクセスできるということです。しかし、その後、ここで何が起こっているのか:PHPでのこの変数の使用方法

public function store(Request $request) 
{ 
    $this->validate() 
} 

このコードはLaravelフレームワークのコントローラクラスからです。私はvalidate()メソッドにアクセスできますが、現在のクラスではなく、ベースクラスまたは親クラスから継承されていても$ this変数を使ってアクセスできなくてすべきです。

以降、私はこのように私のモデルを使用することができたコードで:

$post = new Post; 

なぜ私は、そのクラスのコンストラクタモデルPostクラスを呼び出していませんでしたか?私は信じて何

+1

'$ this'は、継承ツリーを介して動作し、親、祖父母、曾祖父母などのpublicまたはprotectedメソッドにアクセスできます。だからなぜあなたは 'それをベースクラスや親クラスから継承しても、この変数を使ってアクセスできなくてすべきだと信じていますか? ' –

+0

このリンクをチェックすると、役に立つかもしれません。http://stackoverflow.com/questions/1523479/what-does-the-variable-this-mean-in-php –

+0

'$ post = new Post;' .. ..あなたがクラスをインスタンス化すると、コンストラクタは自動的に呼び出されます –

答えて

5

は$これやこのクラスの 現在のインスタンスを指すように使用できることであり、すべての非静的 メンバーへのアクセス権を持っています。

これは間違いありません。

私は()メソッドを検証するためにアクセスすることができますが、問題は、そのない で現在のクラスであってもそのがベースまたは 親クラスから継承されている場合、私はそれにアクセスできないようにする必要があり$ this変数を通して。

これは間違っています。

validateの方法は、traitLaravel\Lumen\Routing\ProvidesConvenienceMethodsにあります)から得られます。コントローラーがこの特性を使用し、コントローラーを拡張する場合、この「基本」クラスからメソッドを継承しました。

関連する問題