rfc:too_few_args

PHP RFC: Replace "Missing argument" warning with "Too few arguments" exception

Introduction

Historically, PHP allows calling functions with fewer actual parameters than required by the function definition. These “non-passed” arguments lead to warning emission and continuation of function execution with uninitialized arguments.

function foo($a) {
   var_dump($a);   // NULL + Warning: Undefined variable: a 
   var_dump($a);   // NULL + Warning: Undefined variable: a
}
foo();             // Warning: Missing argument 1 for foo()

This strange behavior:

  • allows execution of functions with unexpected input data (nobody checks isset() for all arguments)
  • doesn't have real use cases (in any case, foo($a = null) is better)
  • may lead to warning bloating
  • disables obvious optimization opportunities

Proposal

I propose to disable calling “user” functions with insufficient actual parameters. PHP will throw an “Error” exception instead.

function foo($a) {
   var_dump($a);   // not executed
   var_dump($a);   // not executed
}
foo();             // throw Error("Too few arguments to function foo(), 0 passed in %s on line %d and exactly 1 expected")

Using this approach, all attempts to call functions with unexpected input data are going to be caught as soon as possible.

Behavior of internal functions is not going to be changed.

Backward Incompatible Changes

The BC break in intended.

Proposed PHP Version(s)

PHP 7.1

Proposed Voting Choices

The vote is a straight Yes/No vote, that requires a 2/3 majority. The voting began on Jun 6 and will close on Jun 16.

Replace
Real name Yes No
aharvey  
ajf  
bishop  
bwoebi  
cmb  
colinodell  
danack  
daverandom  
davey  
derick  
dm  
dmitry  
dragoonis  
fa  
galvao  
guilhermeblanco  
hywan  
kalle  
kguest  
krakjoe  
laruence  
lcobucci  
leigh  
levim  
lstrojny  
marcio  
mariano  
mattwil  
mcmic  
mrook  
nikic  
ocramius  
pajoye  
patrickallaert  
peehaa  
pierrick  
pmjones  
pollita  
rasmus  
sammyk  
santiagolizardo  
sebastian  
sobak  
stas  
thekid  
tpunt  
trowski  
yohgaki  
zeev  
zimt  
Final result: 39 11
This poll has been closed.

Patches and Tests

Implementation

After the project is implemented, this section should contain

  1. the version(s) it was merged to
  2. a link to the PHP manual entry for the feature
rfc/too_few_args.txt · Last modified: by 127.0.0.1