__FUNCTION__ In Closure Changed

When using the magic constant __FUNCTION__ inside a closure, the content used to be the {closure} string only. Since PHP 8.4, it also includes the name of the original file, and the line number, so as to identify the origin source code.

PHP code

<?php

$foo = fn() => __FUNCTION__;

$closure = function() { return __FUNCTION__;};

echo $foo();

echo $closure();


?>

Before

{closure}{closure}

After

{closure:/codes/magicConstantInClosure.php:3}{closure:/codes/magicConstantInClosure.php:5}

PHP version change

This behavior changed in 8.4