《PHP8上級試験対策》register_shutdown_function() の呼び出し順序と exit の影響を理解する

  • URLをコピーしました!

はじめに

PHP スクリプト終了時に実行される「シャットダウン関数」は、register_shutdown_function() によって登録できます。
複数回登録した場合の呼び出し順序や、関数内で exit() を呼んだときの挙動は、試験でもよく問われるポイントです。
この記事では、実際のコード例とともに実行順序の仕組みをわかりやすく整理します。

キーワード: register_shutdown_function / シャットダウン関数 / exit / コールバック / スクリプト終了処理

目次

🧩 register_shutdown_function() とは?

register_shutdown_function() は、スクリプト終了時に自動的に呼び出される関数を登録する仕組みです。
構文は以下の通りです。

register_shutdown_function(callable $callback, mixed ...$args): void

💬 ポイント

  • 関数を「複数回」登録できる
  • 「登録した順」に実行される
  • 登録された関数の中で exit() を呼ぶと、それ以降の関数は呼ばれない

💻 実行例

<?php
declare(strict_types=1);
error_reporting(-1);

echo "start \n";

register_shutdown_function(function(){
    echo "shutdown func 1st\n";
});

register_shutdown_function(function(int $num){
    echo "shutdown func 2nd({{$num})\n";
}, 123);

register_shutdown_function(function(){
    echo "shutdown func 3rd\n";
    exit; // ← ここで処理が終了する
});

register_shutdown_function(function(){
    echo "shutdown func 4th\n";
});

exit;
echo "end \n";

🧮 実行結果

start 
shutdown func 1st
shutdown func 2nd({123)
shutdown func 3rd

🔍 実行の流れを解説

1️⃣ “start” が出力される。
 → スクリプトが exit; に到達。

2️⃣ スクリプト終了時に、登録済みの shutdown 関数が「登録順」に実行される。

登録順関数内容実行される?備考
1stメッセージ出力実行される
2nd引数 123 を受け取り出力実行される
3rdメッセージ出力+exitここでスクリプト終了
4thメッセージ出力実行されない

🧭 exit の影響を図で理解する

┌────────────────────────────┐
│ register_shutdown_function │
└────────────┬───────────────┘
             │
             ▼
    ┌───────────────────────┐
    │ shutdown func 1st     │ ← 実行
    ├───────────────────────┤
    │ shutdown func 2nd     │ ← 実行
    ├───────────────────────┤
    │ shutdown func 3rd     │ ← 実行(exit発生!)
    ├───────────────────────┤
    │ shutdown func 4th     │ ← 実行されない
    └───────────────────────┘

exit によって「残りのシャットダウン関数」はキャンセルされる点が試験の要注意ポイントです。

💡補足:exitを削除すると…

register_shutdown_function(function(){
    echo "shutdown func 3rd\n";
    // exit; ← 削除
});

出力は次のように変わります👇

start 
shutdown func 1st
shutdown func 2nd({123)
shutdown func 3rd
shutdown func 4th

✅ まとめ

項目内容
複数登録register_shutdown_function() は何度でも呼べる
実行順序登録順 に実行される
exitの影響exit()を呼ぶと以降のshutdown関数は呼ばれない
試験での注意点呼び出し順とexitの停止位置を意識すること

この記事が気に入ったら
いいねしてね!

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