> Le 26 juin 2023 à 17:05, G. P. B. <[email protected]> a écrit :
>
> On Wed, 31 May 2023 at 23:20, Claude Pache <[email protected]
> <mailto:[email protected]>> wrote:
>> Although your RFC says that the `zend.assertions` ini setting has superseded
>> `assert.active` for a while, the “official” php.ini file still advises to
>> modify the value of `assert.active` rather than the one of `zend.assertion`
>> in order to switch behaviour at runtime:
>>
>> https://github.com/php/php-src/blob/91fd5641cde138b8894a48c921929b6e4abd5c97/php.ini-development#L1604
>>
>> I bet that many people (myself included) follows the advice given in
>> `php.ini`.
>
> This talks about run-time modification, which is something that I don't think
> should be done in practice, nor is often done.
Although the specific comment in the php.ini file talks about runtime
switching, it is in fact irrelevant whether it is set at runtime or not. More
concretely; I use currently the settings:
* `zend.assertion=1` as set in the global php.ini;
* `assert.active = on` or `off` in my per-directory .user.ini or .htaccess
file, depending on whether I want to enable assertions by default;
* optionally `ini_set('assert.active', '1')` at runtime when I want to enable
debug mode temporarily.
I have established the above settings several years ago (at the time of PHP 7),
after having carefully read the documentation (and having been slightly
confused by the redundancy between `assert.active` and `zend.assertion`). I
might have end up to switch between `zend.assertion = 0/1` instead of switching
between `assert.active = on/off` instead; I can’t say exactly why I chose the
former option instead of the latter, but I guess that both the comment in the
`php.ini` file, and the existence of `assert_options(ASSERT_ACTIVE, ...)` as an
alternative to `ini_set('assert.active', ...)`, have influenced my choice.
Note also that the above settings minus `zend.assertion` was the way to do it
in PHP 5 (again it is irrelevant whether it is at runtime or not), and many
people that used assertions in PHP 5 may have continued to use that way without
modification, as there is currently no strong reason to change (only
`zend.assertions=-1` is relevant if you are especially concerned about
micro-optimisation).
Now, of course, people will adapt to the new settings. But given the confusing
state of the options (both `zend.assertion` and `assert.active` must be
enabled, and I am not even speaking about `assert.exception`), you ought to be
super-clear (in the deprecation notice, in the php.ini file, in the docs), what
is the the expected state: paradoxically leave `assert.active` and
`assert.exceptions` enabled (the default value) even when you want to disable
assertions, and playing exclusively with `zend.assertion`.
—Claude