Re: NULL Coercion Consistency
| From: | Craig Francis | Date: | Wed, 27 Apr 2022 16:30:45 +0000 |
| Subject: | Re: NULL Coercion Consistency | ||
| References: | 1 2 3 4 5 6 7 8 9 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-117637@lists.php.net to get a copy of this message | ||
On Mon, 25 Apr 2022 at 23:18, Larry Garfield <larry@garfieldtech.com> wrote:
> <off topic>
>
> Internal functions error if you pass excessive arguments to a non-variadic
> function. User-space functions just ignore the extras. This is an
> inconsistency that has caused me considerable grief in the past year.
>
> I know Joe has said he wants userspace to become more strict like internal
> on this one. I will not predict what actually happens.
>
> </off topic>
Just to note our off-list discussion, this is shown with:
```
function example($a) {
var_dump(func_get_args());
}
$a = example('A', 'B'); // Fine
$b = strlen('A', 'B'); // Expects exactly 1 argument, 2 given
```
It's due to the old (pre-variadic) approach of using
func_get_args(),
func_num_args(), etc...
https://www.php.net/manual/en/functions.arguments.php#functions.variable-arg-list
"It is also possible to achieve variable-length arguments by using
func_num_args(), func_get_arg(), and func_get_args() functions. This
technique is not recommended as it was used prior to the introduction of
the ... token."
I'd also note that using these functions (instead of "...$var") aren't so
good for IDE's or Static Analysis, as the function signature does not
clearly define the parameters exist (let alone type)... so these func_*
functions might be candidates for deprecation, if anyone cares enough about
them :-)
Craig