Reputation: 3815
I am a n00b at php. I was learning about Default Parameters so I made this function.
function doFoo($name = "johnny"){
echo "Hello $name" . "<br />";
}
I made these calls
doFoo();
doFoo("ted");
doFoo("ted", 22);
The first two printed what was expected i.e
Hello johnny
Hello ted
but the third call also printed
Hello ted
I was expecting an error, after all the function is made for one argument whereas I am calling it with two arguments.
Why was there no error?
Upvotes: 26
Views: 7911
Reputation: 1566
Apparently because that's how PHP programmers like it. There was a String Argument Count RFC to emit a Notice when too many arguments are sent, but it was soundly rejected, to my dismay: https://wiki.php.net/rfc/strict_argcount
Upvotes: 0
Reputation: 157896
because PHP functions support variable number of parameters.
Upvotes: 7
Reputation: 18253
It is not wrong to pass more arguments to a function than needed.
You only get error if you pass to few arguments.
function test($arg1) {
var_dump($arg1);
}
test();
Above will result in following error:
Uncaught ArgumentCountError: Too few arguments to function...
If you want to fetch first argument plus all others arguments passed to function you can do:
function test($arg1, ...$args) {
var_dump($arg1, $args);
}
test('test1', 'test2', 'test3');
Resulting in:
string(5) "test1"
array(2) {
[0]=>
string(5) "test2"
[1]=>
string(5) "test3"
}
Upvotes: 9
Reputation: 2309
It should only print a notice, but no error. I think you have your error reporting set up so that notices are not shown on screen.
Try pasting this at the top of your code:
error_reporting(E_ALL | E_STRICT);
Upvotes: -8