だいぶ前にこんな記事を書いていましたけど、
どうやら PHP 7.4 では zend.exception_ignore_args なるオプションが増えたらしく幻想ではなくなったようです。
PHP 7.3 以前では SplFileObject のインスタンスが bar で発生した例外に掴まれて main まで飛んでいくので foo のスコープを抜けてもファイルは閉じられませんでした。
しかし PHP 7.4 で zend.exception_ignore_args を有効にしておけば例外によって関数の引数が掴まれることがないので、bar で発生した例外に SplFileObject のインスタンスが掴まれることはなく、foo のスコープを抜ければファイルは閉じられます。
以前社内で、例外がログられるときにスタックトレースの引数にセンシティブな情報があるとやばいのでそのたぐいの情報はリクエストから取り出した直後にオブジェクトか何かでラップした方が良いのだろうか、とか話題になったんですけど(このとき)、それもこれで一緒に解決できるということですね(むしろそっちが zend.exception_ignore_args の本来の目的ですね)。
PHP 7.3 以前だと #0 /in/F9nc9(9): f('ore no himitu') のように引数が出力されてしまってますけど、PHP 7.4 で zend.exception_ignore_args が有効なら #0 /in/F9nc9(9): f() のように引数は現れません。