On Fri, 4 Jul 2025 at 22:03, Iliya Miroslavov Iliev <i.mirosla...@gmail.com>
wrote:

>
>
> On Fri, Jul 4, 2025 at 6:09 PM Kamil Tekiela <tekiela...@gmail.com> wrote:
>
>>
>>
>> On Fri, Jul 4, 2025, 16:50 fennic log <fennic...@gmail.com> wrote:
>>
>>> This is basically an idea I have for PHP to support a main entry point.
>>> Where regardless of execution, if you run a PHP file, in CLI or Web
>>> request.
>>> If the file that is executed contains a main function, that is
>>> automatically executed by the engine after any procedural code.
>>>
>>> Any procedural code in the file, and included files are executed before
>>> main(). I made this decision because there would be cases where developers
>>> want to set up a global scope and variables.
>>> The main entry function MUST be within the executed file, any included
>>> files which contain a main function are treated as user functions.
>>>
>>> main function signature: `function main(): int;` main must return an int
>>> exit code.
>>>
>>> Example
>>> ```php
>>> echo "Before main";
>>> function main(): int
>>> {
>>>     echo "Executed in main";
>>>     return 0;
>>> }
>>> echo "After main";
>>> return 1; // This is ignored as main() exists and its return value is
>>> the exit code.
>>> ```
>>>
>>> Expected output:
>>> Before main
>>> After main
>>> Executed in main
>>> PHP returns code 0
>>>
>>> *Open questions.*
>>>
>>> *1.* Should we add a declare(main_entry_point=true); for it to be opt-in
>>> *2.* Should main() take arguments?
>>> *3.* Should the main() be context aware? eg `main(array $argv, int
>>> $argc)` for the CLI SAPI. I'm not sure what it would be for CGI SAPI.
>>>
>>
>> Why though?
>>
>> You are just saving seven keystrokes.
>>
>> main();
>>
>> Besides, PHP already has main function so what you are proposing would be
>> confusing.
>>
>
>
> fennic, you don't get the concept of the `main` function. Nothing will be
> printed before nor after. Only what is inside it as a rule nothing else is
> executed outside that scope. You will end up with "headers already sent"
> and so on with that proposition.
>
> Kamil, you forgot to count the enter button for the new line... sheesh :)
>
> --
> Iliya Miroslavov Iliev
> i.mirosla...@gmail.com
>

I made the decision to keep precedule code to execute first due to, for
example, where you need to `include(./vendor/autoload.php)`
If we limit execution to only the inside main() function where main()
exists, everything would break, this the keeps BC with existing codebases.

Reply via email to