LoginSignup
3
2

More than 1 year has passed since last update.

🏰【Laravel6】register_shutdown_function()使うときは配列にして$thisも渡す

Last updated at Posted at 2019-12-30

環境

PHP 7.3.10
Laravel 6.5.0

やりたいこと

関数の実行終了前に任意の関数呼び出すregister_shutdown_function()をLaravelで使いたい
が、こいつを書くと下記の例外が発生する

ErrorException
register_shutdown_function(): Invalid shutdown callback 'HogeHoge' passed

どうやらインスタンスメソッドである「$this」を渡さないといけない様子

やったこと

引数を配列にして$thisと対象の関数名を渡す

HogeController.php
    /**
     * 完了前にコールバックを呼び出したい関数
     *
     * @param Request $request
     */
    public function doSomething(Request $request)
    {
        // 色々処理します
        // ...

        // ❌例外発生パターン
        register_shutdown_function('HogeHoge');
        // 🔵これで実行できます
        register_shutdown_function([$this, 'HogeHoge']);

        return back();
    }

    /**
     * 実行完了時に呼びだされるコールバック関数(public)
     *
     * @return void
     */
    public function HogeHoge(): void
    {
        // ログ作成、終了処理等の何かをする
        // ...
    }

※private関数だと呼び出せない

結果

例外発生なく呼び出せます
$thisじゃなくても指定できそうにも見えます

CakePHPでも同じ方法で解決できました

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2