環境
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でも同じ方法で解決できました