PHP默认参数值

时间:2014-04-21 08:18:50

标签: php function arguments default

我正在玩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

2 个答案:

答案 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);很困惑