【发布时间】:2014-04-21 08:18:49
【问题描述】:
我在玩 php default argument values 并且在传递多个参数时感到困惑。
我已经创建了自己的函数,如下所示,这是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
【问题讨论】:
-
我没有看到第二个和第三个示例之间的差异或结果如何变化。
-
您还没有发布第三个示例的输出?你期望什么,你得到什么?
-
@deceze 抱歉,现在我已经更新了我的问题。
-
你没有通过
$table_fields...!? -
手册引用 (php.net/manual/en/…):
Note that when using default arguments, any defaults should be on the right side of any non-default arguments; otherwise, things will not work as expected.
标签: php function arguments default