Hi
this thread concerns my PR carrying the same title as this email: cli: Automatically execute Closures returned from primary script by TimWolla · Pull Request #23658 · php/php-src · GitHub, where Gina requested that I ask the mailing list for opinions and/or objections against the feature.
My goal is to enable PHP scripts to act both as “reusable module” (defining classes or functions for use in an application) as well as an executable script at the same time, similarly to Python’s `if __name__ == "__main__"` pattern.
My current PR automatically executes any `Closure` returned by the main PHP script, such that:
<?php
function my_json_decode(string $json): mixed {
return json_decode($json, flags: JSON_THROW_ON_ERROR);
}
return static function () {
var_dump(my_json_decode(file_get_contents('php://stdin')));
};
would just define `my_json_decode()` when included in an existing script, but print the decoding of the standard input when run as `echo '{"foo": "bar"}' |php my_json_decode.php` by executing the returned Closure, similar to `echo '{"foo": "bar"}' |python3 -m json.tool`.
Another possible solution, that I didn't yet evaluate, might be defining a magic constant `__MAIN__` that is equivalent to `__FILE__` of the script that is executed first.
Best regards
Tim Düsterhus