簡體   English   中英

如何判斷PHP方法/函數中是否設置了可選參數?

[英]How to tell if optional parameter in PHP method/function was set or not?

假設我有一個帶有以下簽名的方法/函數:

foo($bar = 0)

foo里面,如何判斷是否設置了$ bar isset將總是返回TRUE,因為如果沒有任何內容傳遞給foo ,則$ bar被賦值為0

檢查0不是一個選項。 我需要知道顯式設置為0或默認為0的參數之間的區別。

只需使用func_num_args()來專門檢查傳入的參數數量。

<?php
function foo($bar = 0)
{
    echo "\nNumber of arguments: " . func_num_args();
}

  // Outputs "Number of arguments: 1"
foo(0);

  // Outputs "Number of arguments: 0"
foo();
?>    

實例

您可以使用func_get_args 例:

function foo($optional=null) {
    if (count(func_get_args()) > 0)
        echo "optional given\n";
    else
        echo "optional not given\n";
}

foo(); //optional not given
foo(null); //optional given

請注意,用於內部PHP函數的約定是始終為可選參數提供默認值,並且在未給出兩個參數並且明確給出其默認值時使它們具有相同的行為。 如果您發現其他情況,請提交錯誤報告。 if沒有s,你可以做這樣的事情:

function strpos_wrap($haystack, $needle, $offset = 0) {
    return strpos($haystack, $needle, $offset);
}

這個約定更加強制是userland,因為導致你這個問題的困難已經向你展示了。 如果公約不符合您的需求,至少重新考慮您的方法。 func_num_args / func_get_args的目的主要是允許變量參數函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM