|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
[2020-12-18 09:46 UTC] nikic@php.net
-Summary: Crash in mysqlnd_fetch_stmt_row_cursor when calling
an SP with a cursor
+Summary: call_user_func_array() interprets string keys as
named args
-Type: Bug
+Type: Documentation Problem
[2020-12-18 09:46 UTC] nikic@php.net
[2020-12-18 09:50 UTC] rh at tfli dot co dot uk
[2022-12-02 06:29 UTC] barryuyuamo at gmail dot com
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Tue Oct 28 10:00:01 2025 UTC |
Description: ------------ This might be expected behaviour, but if so, should be made clear in the migration guide and/or the function page. Since upgrading to PHP8, then an unchanged call to call_user_func_array in an existing project was returning the error 'Uncaught Error: Cannot use positional argument after named argument'. Investigating it further, one of the arguments is de-serialised from a JSON object (and so the array has string keys). While I can see the behaviour of `call_user_func_array` using string keys as named arguments being useful, I can also see it being a massive 'gotta' for people when upgrading, especially as it is not currently documented anywhere that this will be the case (a lot of the times this can happen the array internal structure won't be apparent from the code or the error message). Test script: --------------- <?php var_dump(call_user_func_array("strlen", ["hello"])); var_dump(call_user_func_array("strlen", ["a" => "hello"])); // Version Comparison: https://3v4l.org/c1R03 Expected result: ---------------- int(5) int(5) Actual result: -------------- int(5) Fatal error: Uncaught Error: Unknown named parameter $a in /in/c1R03:3 Stack trace: #0 {main} thrown in /in/c1R03 on line 3 Process exited with code 255.