gpt4 book ai didi

php - PHP 回调可以通过引用接受它的参数吗?

转载 作者:可可西里 更新时间:2023-11-01 12:51:08 24 4
gpt4 key购买 nike

我已经测试了以下内容,它适用于 PHP 5.2 和 5.3,但是,据我所知,它没有在任何地方记录,所以我正在评估它的使用。

我在一个名为 isValid 的类中有一个函数,它检查散列以查看给定值是否在允许值集中。有一些值有效的,但已弃用;我希望我的 isValid 函数将传入的值更新为当前值并返回 true。

当我自己调用它时这很好,但是,我也想在用作 array_filter 的回调时使用此方法。

这是一个测试用例,它如预期的那样产生一个值为 2,3,4,5,6 的数组。

<?php
$test = array(1, 2, 3, 4, 5);
echo print_r(array_filter($test, 'maptest'), true);

function maptest(&$value)
{
$value ++;
return true;
}

那么 StackOverflow:这是允许的,还是未记录的功能可能会在将来消失/停止工作/导致错误?

最佳答案

是的,这是允许的。

在这方面,通过回调调用函数并没有什么特别之处。

但是,您的具体示例并没有说明一个困难。考虑:

function inc(&$i) { $i++; }
$n = 0;
// Warning: Parameter 1 to inc() expected to be a reference, value given:
call_user_func('inc', $n);

问题是您将 $n 传递给 call_user_funccall_user_func 不接受引用值。所以在调用 inc 时,它不会收到引用。这不是array_filter的问题,因为它直接遍历数组,可以直接将数组中的变量传递给回调函数。

可以使用调用时间传递引用,但这已被弃用并从主干中删除:

function inc(&$i) { $i++; }
$n = 0;
// Deprecated: Call-time pass-by-reference has been deprecated
call_user_func('inc', &$n);

所以最好的选择是使用 call_user_func_array 代替:

function inc(&$i) { $i++; }
$n = 0;
call_user_func_array('inc', array(&$n));

此函数将按引用传递设置了 is_ref 标志的元素,并将按值传递其他元素。

关于php - PHP 回调可以通过引用接受它的参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3531562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com