2017-08-04 4 views
0

のToDoアプリのチュートリアルでの作業、私はかなりの引数(Request $request)がそうで意味だけでなく、他の(Task $task)と理解していません。以下のコントローラアクションのかっこ内にある引数は何ですか?

私はいくつかの研究を行ってきたと私は依存性注入とどのようにこの構文はPerlのから来たに関する回答を得ます。

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use Auth; 
use App\Task; 

class TasksController extends Controller 
{ 
    public function index() 
    { 
     $user = Auth::user(); 
     return view('welcome',compact('user')); 
    } 

    public function add() 
    { 
     return view('add'); 
    } 

    public function create(Request $request) 
    { 
     $task = new Task(); 
     $task->description = $request->description; 
     $task->user_id = Auth::id(); 
     $task->save(); 
     return redirect('/'); 
    } 

    public function edit(Task $task) 
    { 

     if (Auth::check() && Auth::user()->id == $task->user_id) 
     {    
       return view('edit', compact('task')); 
     }   
     else { 
      return redirect('/'); 
     }    
    } 

    public function update(Request $request, Task $task) 
    { 
     if(isset($_POST['delete'])) { 
      $task->delete(); 
      return redirect('/'); 
     } 
     else 
     { 
      $task->description = $request->description; 
      $task->save(); 
      return redirect('/'); 
     }  
    } 
} 
+0

要求とタスクは引数のクラス型です。メソッドが呼び出されたときに渡される引数の意味は、メソッド宣言で定義されているものと同じクラスのインスタンスでなければなりません。あなたはこれについてはっきりしていますか? –

+0

@NMoeiniあなたがクラスタイプを言うとき、あなたはそのクラスの名前を意味しますか? – Robert

答えて

2

最初に、クラスとオブジェクトの作成方法を理解する必要があります。第2に、オブジェクト指向プログラミングでは、すべてオブジェクトとして扱います。一つのタスクはTaskクラスのオブジェクトです。したがって、タスクを編集するには、タスクオブジェクトを渡す必要があります。一方の要求に

は、前のHTTPリクエストから実行されたすべてのデータを取得することを可能にする、HTTPのヘルパークラスです。たとえば、フォームを送信している場合は、すべてのフォームデータと追加のデータがLaravelフレームワークに渡され、Requestクラスを介してこれらのデータにアクセスできます。あなたは依存性注入についてこれらすべてが正しい。

はさらにもっと、オブジェクト指向プログラミングの世界では、依存性注入とオブジェクトの概念は同じです。他のオブジェクト指向プログラミングを探索すると、あなたの答えを見つけることができます。タスクは私たちのクラスであり、私たちはタスクを編集したいので、タスクは、エンティティとデータのOOP世界でクラス "タスク"のオブジェクトでなければなりません。

ちょうど私たちが手続き非オブジェクト指向プログラミングを行うために使用覚えて、明確にします。シンプルで、我々は

public function edit($task_id){ 
    //edit record (task) based on task id in mysql DB 
} 

しかし、OOP(オブジェクト指向プログラミング)で

は、私たちはクラスで遊ぶこのような何かを、我々はORM(オブジェクトリレーショナルマッピング)を持っているので、配列やフィールドをないオブジェクトに使用されます。非常に基本的な意味で

あなたがCプログラミングに2つのint型を追加する方法を書きたいならば、あなたはメソッドに二つの引数を渡して、この方法では

sum(int a, int b){ 
    return a+b; 
} 

好きです。上記のeditメソッドでは、データ型タスク(単純な単語)を扱っているため、タスクオブジェクトを渡す必要があります。

+0

ありがとう!! Railsから来て、議論が何を意味するのか分からなかった! – Robert

+0

ああ、クールな引数は私たちのメソッドに渡すパラメータですが、現代のフレームワークは私たちの仕事を簡単にし、すべてのオブジェクト指向にしました。 – webDev

0

PHP Manual

によれば、型宣言、関数パラメータは呼び出し時 特定のタイプであることを要求することができ、またPHP 5でタイプヒントとして知られているPHPの型宣言と呼ばれています。指定された値の型が正しくない場合は、エラーが生成されます。PHP 5では、回復可能な という致命的なエラーが発生しますが、PHP 7では型エラーの例外がスローされます。

関連する問題