加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何确定传递参考变量是否设置?

发布时间:2020-12-13 13:57:24 所属栏目:PHP教程 来源:网络整理
导读:对于声明如下的任意函数: function foo($first,$second = null) { // if ($second is assigned) { // Work with $second // }} 如果确定$second是否确实在通话时分配给一个变量,例如: foo('hello',$second); VS foo('hello'); // Notice $second is unassi
对于声明如下的任意函数:
function foo($first,&$second = null) {
    // if ($second is assigned) {
    //     Work with $second
    // }
}

如果确定$second是否确实在通话时分配给一个变量,例如:

foo('hello',$second);

VS

foo('hello'); // Notice &$second is unassigned

尝试了isset(),is_null(),但似乎不起作用.

更新:

在这里创建了一个test script here

我的理解是,您希望实现一个实现类似于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 – 开发人员闪亮的新玩具,它允许您内省自己的功能,并确定签名是否从创建时改变.使用它谨慎,反思不便宜,特别是考虑到替代品.>谦虚的代码评论 – 代码监管的低调形式;一个简单的行,说明重要 – 不要在$second之前添加参数

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读