2017-06-07 7 views
0

私の質問は多少不相応かもしれません。私は、抽象クラスメソッドのオーバーライドがどのように機能するかを実際に理解できません。私はOrderControllerをModelクラス自体から派生したOrderモデルを受け付けるメソッドを持っていますが、なぜそれはエラーをスローしますか?インタフェースを実装する抽象クラスのメソッドオーバーライド

interface CrudInterface 
{ 
    public function show(Model $model); 
} 

abstract class CrudController extends Controller implements CrudInterface { 
    public function show(Model $model) 
    { 
     return $model; 
    } 
} 

class OrderController extends CrudController { 

    // Throws an erorr (" 
    // Declaration of App\Http\Controllers\OrderController::show(App\Order $order) should be compatible with 
    // App\Http\Controllers\CrudController::show(Illuminate\Database\Eloquent\Model $model 
    // ") 
    public function show (Order $order) { 
     return $order 
    } 

} 

ありがとうございます。

+1

は 'Order'クラスは' Model'クラスを拡張していますか? –

+0

はいモデルを拡張します。 –

答えて

3

インタフェースは一致している必要があります:

class OrderController extends CrudController { 

    public function show (Model $order) { 
     if (!$order instanceOf Order) { 
      throw new InvalidArgumentException(); 
     } 
     return $order 
    } 
} 
関連する問題