我的理解是,您希望实现一个实现类似 的函数,preg_match如果通过,第三个参数将填充内存模式。
在内部,PHP 函数使用一个名为zend_parse_parameters();的函数。它接受格式字符串和可变数量的参数,这些参数将填充调用参数的元数据。如果未传递参数(例如,当它是可选的),则元数据不可用,因此很容易检测到。
回到 PHP 本身,不幸的是没有这样的东西func_arg_used($var)可以告诉你是否$var作为函数参数传递;也许这对语言来说是一个有趣的贡献,但在那之前你必须满足于更古老的东西:)
if (func_num_args() > 1) {
// $second was passed and can be used to populate
}
更改函数的签名时可能需要小心,尤其是在$second; 前面添加参数时。但是,这自然不应该经常发生,因为它肯定会破坏依赖函数。最后添加更多参数对上面的代码没有影响。
有两种方法可以使用:
ReflectionFunction- 开发人员的闪亮新玩具,它允许您自省您的功能并确定签名是否从创建时更改。不过,谨慎使用它,内省并不便宜,尤其是考虑到替代方法。
不起眼的代码注释——代码监管的低调形式;一条简单的线说// IMPORTANT - don't add arguments before $second