Laravel【__invoke()メソッドの使い方】

よーすけ
__invokeメソッドについて解説します!

こんにちはよーすけです。

今回はあまり見かけないと思いますが__invoke()メソッドについて解説します。

何かとメリットがあるので知っておくだけでもいいと思います!

それでは見てみましょう。

目次

__invoke()メソッドはいつ使える?

__invokeメソッドとはPHPマジックメソッドの1つでインスタンス変数を関数風に呼び出したりシングルアクションControllerでメソッド名を省略してルーティングを記述できるようになります。

使い方

// HogeController.php
public function __invoke(){
 return view('hoge'); 
}
// Web.php(ルーティングファイル)
Route::post('/hoge', 'App\Http\Controllers\HogeController');

通常と何が違うか分かりましたか?一度__invoke()を使わないパターンを見てみましょう。

通常

// HogeController.php
function hoge(){
 return view('hoge'); 
}
// web.php(ルーティングファイル)
Route::post('/hoge', 'App\Http\Controllers\HogeController@hoge');

注目すべきはルーティングファイルです。

通常最後に@hogeのようにメソッド名を指定しないといけませんが、今回の__invokeメソッドが使われる場合は@hogeの部分が省略できます。

invokeメソッドを呼び出す

__invokeメソッドはインスタンス変数を関数風にすることで呼び出されます。

通常はインスタンス変数にメソッド名をつけることで呼び出すことができますが__invokeはメソッド名を記述しなくてすみます。

<?php
class Hoge{

   public function __invoke(){
      echo ’__invokeメソッドです。’;
   }

   public function showText(){
      echo '__invokeメソッドではありません。';
   }
}
$hoge = new Hoge();
$hoge->showText(); // __invokeメソッドではありません
$hoge(); // __invokeメソッドです。

また__invokeメソッドに引数を渡すことでメソッド内で変数を渡すこともできます。

<?php
class Hoge{
  public function __invoke(string $text){
    echo $text . ’です。’;
  }
}
$hoge = new Hoge();
$hoge('__invokeメソッド'); // __invokeメソッドです。

まとめ

以上__invokeメソッドを紹介しました。

知っておくとコードの記述幅が広がるので頭の片隅に入れておきましょう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

よーすけのアバター よーすけ プログラマー

2022年4月 大阪自社開発会社入社
使用言語:JavaScript / PHP / Laravel / Vue.js / (WordPress)
勉強中:React / Next.js / TypeScript

Web制作実績:6件
デザインからコーディング、運用まで幅広く行います
ご依頼はお問い合わせフォームからお願いします。

コメント

コメントする

目次