如何判断PHP方法/函数中是否设置了可选参数?

Sta*_*bie 14 php

假设我有一个带有以下签名的方法/函数:

foo($bar = 0)
Run Code Online (Sandbox Code Playgroud)

foo里面,如何判断是否设置了$ barisset将总是返回TRUE,因为如果没有任何内容传递给foo,则$ bar被赋值为0.

检查0不是一个选项.我需要知道显式设置为0或默认为0的参数之间的区别.

Pet*_*tai 15

只需使用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();
?>    
Run Code Online (Sandbox Code Playgroud)

实例


Art*_*cto 9

你可以用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
Run Code Online (Sandbox Code Playgroud)

请注意,用于内部PHP函数的约定是始终为可选参数提供默认值,并且在未给出两个参数并且明确给出其默认值时使它们具有相同的行为.如果您发现其他情况,请提交错误报告.这让你在没有ifs的情况下做这样的事情:

function strpos_wrap($haystack, $needle, $offset = 0) {
    return strpos($haystack, $needle, $offset);
}
Run Code Online (Sandbox Code Playgroud)

这个约定更加强制是userland,因为导致你这个问题的困难已经向你展示了.如果公约不符合您的需求,至少重新考虑您的方法.func_num_args/ 的目的func_get_args主要是允许变量参数函数.