register_shutdown_function

関数の概要

PHPの register_shutdown_function は、スクリプトの実行が終了する直前に指定した関数を自動的に呼び出すための関数です。これにより、エラー処理やリソース開放、ログ記録など、スクリプト終了時に必ず実行したい処理を登録することができます。特にエラーが発生しても確実に処理をしたい場合に役立ちます。

パラメータの説明

  • callback:終了時に実行するコールバック関数名(文字列、クロージャ、配列形式のクラスメソッドなどが指定可能)
  • ...$args:コールバック関数に渡す任意の引数(0個以上指定可能)

戻り値

成功すると、登録されたシャットダウン関数の名前を文字列で返します。失敗すると FALSE を返します。

使用例

基本的な使い方

<?php
function shutdown() {
    echo "スクリプトが終了しました。";
}

register_shutdown_function('shutdown');
echo "メイン処理中..."; 
?>

この例では、スクリプトの最後に shutdown 関数が自動的に呼ばれ、「スクリプトが終了しました。」と表示されます。

引数を渡す例

<?php
function saveLog($message) {
    file_put_contents('log.txt', $message . "n", FILE_APPEND);
}

register_shutdown_function('saveLog', 'スクリプトが終了しました。');
echo "実行中..."; 
?>

終了時に saveLog 関数が呼ばれて、指定したメッセージがログファイルに追記されます。

クラスメソッドを登録する例

<?php
class Cleanup {
    public static function clearCache() {
        echo "キャッシュを削除しました。";
    }
}

register_shutdown_function(['Cleanup', 'clearCache']);
echo "処理中..."; 
?>

この場合は、クラスの静的メソッド clearCache がスクリプト終了時に呼び出されます。

匿名関数(クロージャ)を使う例

<?php
register_shutdown_function(function() {
    error_log("スクリプトが終了しました。");
});
echo "処理しています..."; 
?>

匿名関数を直接登録することで、簡単に終了処理をまとめて記述できます。

関連する関数

  • register_tick_function:PHPのticksが発生するたびにコールバックを実行
  • set_error_handler:ユーザー定義のエラーハンドラを登録
  • error_log:エラーやログをファイルやメールに書き込む

まとめ

register_shutdown_function は、PHPスクリプトの終了時に必ず実行したい処理を登録できる便利な関数です。エラーハンドリングやリソースの解放、ログの書き込みなど、幅広い場面で活用できます。引数も渡せて、匿名関数やクラスメソッドも登録可能なので、用途に応じて柔軟に使用してください。