On 05.08.2024 at 21:37, Gina P. Banyard wrote:

> This sounds like a uopz extension issue that is easily fixed.

Most likely, yes, although still somebody has to provide a fix, and
someone has to do a new release.

> I am not sure why we should bend over backwards for extensions that allow to 
> break usual userland semantics while preventing userland behaviour to be 
> better.

We shouldn't do one or the other without having weighted the pros and
cons.  So what are the pros regarding improved userland behavior:

* we can use named arguments

So we can now write `exit(status = 1)` or `exit(status = "some error
message`).  I don't see any improvement using named arguments for a
single argument function (maybe unless it is a boolean argument).  And
for a string argument, I don't think that `status` is a sensible
parameter name here.

* pass to functions as callable

That might be a nice feature, but at least I have never seen the need to
pass `exit` as callable.  And it wouldn't be hard to define a wrapper
function (e.g. `my_exit()`) if someone really needs to pass it as a
callable.

* does not respect strict_types and does not follow usual type juggling
semantics

That *might* be an issue (although I've never stumbled upon that), but
it seems to me that this could even be handled in the ZEND_EXIT handler.

Perhaps I've missed some pros, but it seems these have been the ones the
RFC explicitly mentions.

So, what are the cons:

* removing the ZEND_EXIT opcode

That immediately breaks any extension using it.  A quick Github search
lists 3.1 k occurrences[1].

* making exit a "proper" function

It still can be called without parentheses, so I don't regard it as a
proper function.  It *might* even be confusing to readers ("oh, now I
can call a function without arguments by omitting the parentheses – but
why doesn't it work for other functions?").  And the PHP manual even
states (emphasis mine):

| exit is a *language* *construct* and it can be called without
| parentheses if no status is passed.

Weighting the pros and cons is left as an exercise to the reader.

[1] <https://github.com/search?q=ZEND_EXIT&type=code>

Thanks,
Christoph

Reply via email to