我正在玩php default argument values
并且在传递多于一个参数方面感到困惑。
我创建了自己的函数,就像bellow一样,这是php.net的例子(例#3)
function makecoffee($type = "cappuccino") {
return "Making a cup of $type.\n";
}
echo makecoffee();
echo makecoffee(null);
echo makecoffee("espresso");
我创造了这个:
$table_fields = array('id', 'fname', 'lname', 'phone', 'message');
$table_name = 'Some Table';
function table($table_name, $table_fields= "*", $limit= 10) {
echo 'Table Name '. $table_name;
echo "<br />";
echo 'Table Fields '. $com_table_fields = implode(", ", (array)$table_fields);
}
table($table_name, $table_fields);
我已经在函数中传递了两个参数,我得到了这个结果:
Table Name Some Table
Table Fields id, fname, lname, phone, message
如果我不会在参数中传递$table_name
,我会在默认情况下得到这个结果,这是完美的。
Table Name Some Table
Table Fields *
现在我添加了一个带默认值的参数(检查下方),当我删除此参数$table_fields
时,变量值发生了变化,这是不正确的。
$table_fields = array('id', 'fname', 'lname', 'phone', 'message');
$table_name = 'Some Table';
$limit = 5;
function table($table_name, $table_fields= "*", $limit= 10) {
echo 'Table Name '. $table_name;
echo "<br />";
echo 'Table Fields '. $com_table_fields = implode(", ", (array)$table_fields);
echo "<br />";
echo 'Limit '. $limit;
}
table($table_name, $limit);
我想要上面的结果:
Table Name: Some Table
Table Fields: *
Limit: 10
答案 0 :(得分:0)
函数参数由它们的位置传递,即传递它们的顺序。第二个函数参数将始终是第二个函数参数。
function foo($arg1, $arg2 = null, $arg3 = 42) { ... }
^ ^ ^
| | |
v v v
foo($bar, $baz, $quorx);
To&#34; skip&#34;参数,甚至是具有默认值的参数,你需要来传递一些值。通常,您将通过默认值:
function table($table_name, $table_fields = "*", $limit = 10) { ... }
table($table_name, "*", $limit);
答案 1 :(得分:-1)
$table_fields = array('id', 'fname', 'lname', 'phone', 'message');
$table_name = 'Some Table';
$limit = 5;
function table($table_name, $limit= 10, $table_fields= "*") {
echo 'Table Name '. $table_name;
echo "<br />";
echo 'Table Fields '. $table_fields;
echo "<br />";
echo 'Limit '. $limit;
}
table($table_name, $limit);
输出是:
Table Name Some Table
Table Fields *
Limit 5
代码中的,$ com_table_fields = implode(“,”,(array)$ table_fields);很困惑