デフォルトが指定されている場合、php にパラメータの動的な値を受け入れるようにさせることができないようです。ここで、デフォルト値は関数の最後にある必要があることを読みました。
$isbilling = true;
function retrieve_address($dbh, $customer_id, $isbilling=false){
echo $isbilling; //false
}
ここで何が間違っていますか?
$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
$isbilling のデフォルト値を false に設定しており、呼び出し時に $isbilling パラメータに何も渡していません (実際にはその部分を投稿していないため、想定しています)。
これを試して:
$isbilling = true;
function retrieve_address($dbh, $customer_id, $isbilling=false){
echo $isbilling; //false
}
retrieve_address($dbh, $customer_id, $isbilling);
動的な値は、関数の引数の任意の場所にすることができ、最初のものにすることもできます。ただし、関数を呼び出すたびにオプションのパラメーターを指定する必要がないように、最後にそれらを保持することをお勧めします。
また、関数内のエコーを return に変更しました。これもベスト プラクティスです。
$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
}