【问题标题】:PHP Default argument valuesPHP 默认参数值
【发布时间】: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


【解决方案1】:

函数参数按它们的位置传递,即它们传递的顺序。第二个函数参数将始终是第二个函数参数。

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);

【讨论】:

    【解决方案2】:
    $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);是混乱

    【讨论】:

    • 天哪,伙计,仔细看看函数定义和他的参数,好吗?!
    猜你喜欢
    • 2011-08-23
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 2012-05-22
    • 2015-12-20
    • 1970-01-01
    • 2012-05-04
    • 1970-01-01
    相关资源
    最近更新 更多