首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP函数中参数默认值的特殊“未定义”值

PHP函数中参数默认值的特殊“未定义”值
EN

Stack Overflow用户
提问于 2018-04-16 01:44:00
回答 1查看 749关注 0票数 2

我需要一个可选的参数,它接受任何值(包括nullfalse),但仍然具有“未指定”状态以允许不同的“默认”行为。PHP中是否有允许模仿“未定义”值的技术?

我想将append方法添加到.NET的LINQ端口YaLinqo中。当前的代码如下:

代码语言:javascript
复制
public function append ($value, $key = null)
{
    return new self(function () use ($value, $key) {
        foreach ($this as $k => $v)
            yield $k => $v;
        if ($key !== null)
            yield $key => $value;
        else
            yield $value;
    });
}

问题是,如果有人想要使用null作为键,他们将无法这样做,因为它是一个特殊的“未定义”的值,这将导致使用自动后续整数。在PHP中,包含序列[ null => null, null => null ]的迭代器是完全有效的,用户应该能够使用append生成它。

我在考虑加入const UNDEFINED = '{YaLinqo.Utils.Undefined}'

代码语言:javascript
复制
const UNDEFINED = '{YaLinqo.Utils.Undefined}';

public function append ($value, $key = Utils::UNDEFINED)
{
    return new self(function () use ($value, $key) {
        foreach ($this as $k => $v)
            yield $k => $v;
        if ($key !== Utils::UNDEFINED)
            yield $key => $value;
        else
            yield $value;
    });
}

这是一个有效的方法吗?有更干净的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-16 09:51:36

您可以使用func_get_args()来实现您想要的结果。请看下面的示例:

代码语言:javascript
复制
function test($value, $key = null) {
    var_dump(func_get_args());
}

test(1);
test(2, null);

这是输出:

代码语言:javascript
复制
array(1) {
  [0]=>
  int(1)
}
array(2) {
  [0]=>
  int(2)
  [1]=>
  NULL
}

如您所见,参数列表只包含传入的参数,而不包含定义的参数。如果您想知道是否有人显式地传递了null,您可以这样做:

代码语言:javascript
复制
$args = func_get_args();
if (isset($args[1]) && $args[1] === null) {}

或者,如果您想知道参数没有通过,您可以这样做:

代码语言:javascript
复制
$args = func_get_args();
if (!isset($args[1])) {}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49848581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档