我正在使用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发布于 2014-04-21 18:03:52
函数参数通过它们的位置传递,即它们被传递的顺序。第二个函数参数将始终是第二个函数参数。
function foo($arg1, $arg2 = null, $arg3 = 42) { ... }
^ ^ ^
| | |
v v v
foo($bar, $baz, $quorx);要“跳过”参数,即使是带有默认值的参数,也需要传递一些值来代替它。通常,您将传递默认值:
function table($table_name, $table_fields = "*", $limit = 10) { ... }
table($table_name, "*", $limit);发布于 2014-04-21 16:54:14
$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(",",(数组)$table_fields);是混乱的
https://stackoverflow.com/questions/23193574
复制相似问题