prometheuspk
prometheuspk

Reputation: 3815

Why does PHP not throw an error when I pass too many parameters to a function?

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

Answers (5)

Gregory Cosmo Haun
Gregory Cosmo Haun

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

Your Common Sense
Your Common Sense

Reputation: 157896

because PHP functions support variable number of parameters.

Upvotes: 7

lejahmie
lejahmie

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

lugte098
lugte098

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

Tom
Tom

Reputation: 1701

PHP doesn't throw an error on function overload.

Upvotes: 17

Related Questions