php不允许我覆盖默认参数

时间:2013-02-19 08:22:12

标签: php

当我指定了默认值时,我似乎无法让php接受参数的动态值。我已经读过here,默认值需要在函数的末尾,我已经完成了。

$isbilling = true;

function retrieve_address($dbh, $customer_id, $isbilling=false){
echo $isbilling; //false
}

我在这里做错了什么?

3 个答案:

答案 0 :(得分:3)

$isbilling = true;

function retrieve_address($dbh, $customer_id, $isbilling=false){
echo $isbilling; //false
}

// you have to call your function

retrieve_address('dbhval', 'CUSTID', $isbilling); // will print true
retrieve_address('dbhval', 'CUSTID'); // will print false

答案 1 :(得分:2)

您已将$ isbilling的默认值设置为false,并且在调用它时没有向$ isbilling参数传递任何内容(我假设,因为您实际上没有发布该部分)。

试试这个:

$isbilling = true;

function retrieve_address($dbh, $customer_id, $isbilling=false){
    echo $isbilling; //false
}

retrieve_address($dbh, $customer_id, $isbilling);

答案 2 :(得分:0)

动态值可以是函数参数中的任何位置,也可以是第一个。但最佳做法是将它们保留在最后,因此每次调用函数时都不必指定可选参数。

我也改变了函数内部的回声返回,这也是一种最佳实践。

$isbilling = true;

function retrieve_address($dbh, $customer_id, $isbilling=false){
     return  $isbilling; //false
}


$returned = retrieve_address($dbh, $customer_id, $isbilling);

因此,您也可以执行以下操作

// will return true or false 
if(retrieve_address($dbh, $customer_id, $isbilling)){
    // if it is true, your code
}else{
    // if it is false
}

$returned = retrieve_address($dbh, $customer_id, $isbilling);
if(returned)){
    // if it is true, your code
}else{
    // if it is false
}