Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过引用错误_Php_Arrays_Pass By Reference_Hook - Fatal编程技术网

Php 通过引用错误

Php 通过引用错误,php,arrays,pass-by-reference,hook,Php,Arrays,Pass By Reference,Hook,我有一个钩子系统设置。。。正在本地主机上工作的。。。我把它放到了现场,得到一个错误,上面写着“警告:通过引用传递的调用时间已被弃用” 现在,很明显,解决方法是从函数调用中删除所有“&”,即从foo(&$me)到foo($me),然后在foo的函数定义中执行“function foo(&$me)” 然而,我不能这样做。。。因为我的钩子接受数组作为参数,所以我需要解决这个问题。比如我可以使用“run_hooks('hook name',$me);”或者“run_hooks('hook name',a

我有一个钩子系统设置。。。正在本地主机上工作的。。。我把它放到了现场,得到一个错误,上面写着“警告:通过引用传递的调用时间已被弃用”

现在,很明显,解决方法是从函数调用中删除所有“&”,即从foo(&$me)到foo($me),然后在foo的函数定义中执行“function foo(&$me)”

然而,我不能这样做。。。因为我的钩子接受数组作为参数,所以我需要解决这个问题。比如我可以使用“run_hooks('hook name',$me);”或者“run_hooks('hook name',array($me,$other_var,etc.))”

这意味着我不能使用“函数run_hooks($hook_name,&$arguments)”,因为我会在php中得到一个错误,说它不能传递“array()”作为引用

有什么想法可以改变吗


谢谢。

传递引用数组-此数组本身不需要是引用:

 function foo($args) {
    modify $args[0]...
    modify $args[1]...
 }

 $someVar = ...
 $anotherVar = ...

 foo(array(&$someVar, &$anotherVar));

传递引用数组-此数组本身不需要是引用:

 function foo($args) {
    modify $args[0]...
    modify $args[1]...
 }

 $someVar = ...
 $anotherVar = ...

 foo(array(&$someVar, &$anotherVar));
我想您应该使用引用来防止不必要的数据拷贝。但这不是您应该使用它们的目的(在php5中)。只需传递数组

function foo($x /* not a reference */) {
  echo $x['bar'], "\n";
} 
$p = array('bar'=>12345);
foo($p);
// or
foo( array('bar'=>12345) );
这不会调用作为参数传递的数组的深度副本,只要不更改数组即可。这种机制称为写时复制,php实现在

中进行了解释,我想您应该使用引用来防止不必要的数据复制。但这不是您应该使用它们的目的(在php5中)。只需传递数组

function foo($x /* not a reference */) {
  echo $x['bar'], "\n";
} 
$p = array('bar'=>12345);
foo($p);
// or
foo( array('bar'=>12345) );

这不会调用作为参数传递的数组的深度副本,只要不更改数组即可。这种机制称为写时复制,php实现在

中进行了解释。我认为我找到了一种可行的解决方法,没有错误,而且它在不修改类中的任何内容的情况下工作。。。可以帮助其他任何人。。。ArrayObject解决了此问题,Sence对象已被“引用”

function test ( $var, $foo )
{
    $var    = 3;
    $foo    = 3;
}

$var    = 1;
$foo    = 1;
call_user_func_array ( 'test', new ArrayObject ( array ( &$var, &$foo ) ) );

print $foo;
print $var;

// Output is 3 3 like expected :)

我想我找到了一个可行的解决方法,没有错误,而且它确实可以在不修改我的类中的任何内容的情况下工作。。。可以帮助其他任何人。。。ArrayObject解决了此问题,Sence对象已被“引用”

function test ( $var, $foo )
{
    $var    = 3;
    $foo    = 3;
}

$var    = 1;
$foo    = 1;
call_user_func_array ( 'test', new ArrayObject ( array ( &$var, &$foo ) ) );

print $foo;
print $var;

// Output is 3 3 like expected :)

不能指定&at function调用,因为它是引用而不是指针。所以你必须移动到函数定义中去&如果它被用作
foo(array(..)的话,为什么它首先应该是一个引用呢是否仍然?您不能指定&at函数调用,因为它是引用而不是指针。所以你必须移动到函数定义中去&如果它被用作
foo(array(..)的话,为什么它首先应该是一个引用呢是否仍然?请参阅“这种形式的调用时间传递引用不会发出弃用通知,但它仍然弃用,并且很可能在下一版本的PHP中删除。”请参阅这种形式的调用时间传递引用不会发出弃用通知,但它已弃用,很可能会在下一版本的PHP中删除