PHP如何知道一个变量是否是一个引用?

标签 php reference

我想用 call_user_func_array 调用一个函数,但我注意到如果参数是函数定义中的引用并且是 call_user_func_array 中的简单值,则会出现以下警告: 警告:test() 的参数 1 应为引用,已给定值

这是我正在尝试做的一个简单示例:

<?php
$a = 0;
$args = array($a);
function test(&$a) {
    $a++;
}
$a = 0;
call_user_func_array('test', $args);
?>

我的问题是:我怎么知道一个值(在本例中是 $args 的第一个值)是否是引用?

最佳答案

不,问题在于函数的第一个参数是按引用传递的(这意味着函数可以在调用者的范围内修改参数)。因此,您必须传递一个变量或可分配的东西作为第一个参数。当您创建像 array($a) 这样的数组时,它只是将变量 $a 的值(即 0)复制到数组中的一个槽中。它不以任何方式引用变量 $a。然后当您调用该函数时,就好像您正在这样做,这是行不通的:

test(0)

如果你真的想要,你可以通过引用将 $a 放入数组中,但这有点棘手:

<?php
$a = 0;
$args = array(&$a);
function test(&$a) {
    $a++;
}
call_user_func_array('test', $args);
?>

至于如何判断数组元素是一个引用……这很难。您可以对数组执行 var_dump(),然后搜索“&”符号:

> var_dump($args);
array(1) {
  [0]=>
  &int(1)
}

关于PHP如何知道一个变量是否是一个引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1541865/

相关文章:

php - 在 php 函数中满足条件时回显类中的 <svg> 元素

java - 如何在spring中引用另一个xml文件的bean

c++ - 返回对原始参数的引用

macos - 是否可以在文件系统上创建 "weakly referenced"硬链接(hard link)?

java - Java中如何使用引用?

php - 限制textarea中的字符 - 转义引号和双引号在MySQL中占用2个字符

php - 为什么构建 PDO 连接很慢?

php - 返回空值;与返回;

c - C/C++ 中的引用/取消引用

php - 组合 IS NULL 和 :value in Doctrine 2 DQL