我需要一个可选的参数,它接受任何值(包括null和false),但仍然具有“未指定”状态以允许不同的“默认”行为。PHP中是否有允许模仿“未定义”值的技术?
我想将append方法添加到.NET的LINQ端口YaLinqo中。当前的代码如下:
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}'
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;
});
}这是一个有效的方法吗?有更干净的方法吗?
发布于 2018-04-16 09:51:36
您可以使用func_get_args()来实现您想要的结果。请看下面的示例:
function test($value, $key = null) {
var_dump(func_get_args());
}
test(1);
test(2, null);这是输出:
array(1) {
[0]=>
int(1)
}
array(2) {
[0]=>
int(2)
[1]=>
NULL
}如您所见,参数列表只包含传入的参数,而不包含定义的参数。如果您想知道是否有人显式地传递了null,您可以这样做:
$args = func_get_args();
if (isset($args[1]) && $args[1] === null) {}或者,如果您想知道参数没有通过,您可以这样做:
$args = func_get_args();
if (!isset($args[1])) {}https://stackoverflow.com/questions/49848581
复制相似问题