我有两个功能.其中之一接收和修改通过引用传递的数组中的一些值.

function dostuff ($param1, $param2, &$arr) {
    //...
    //add new elements to $arr
}

另一个是类中的方法,它包装了第一个方法:

class Wrapper
{
    public function foo (...$args) {
        return dostuff(...$args);
    }
}

但是,如果我将数组传递给‘foo’,则数组保持不变. 我试图用&来声明foo(... &$args),但这导致了一个语法错误.

在PHP中使用Splat运算符时,有没有办法通过引用传递参数?

推荐答案

对于PHP 8.x版本https://3v4l.org/9ivmL

这样做:

<?php

class Wrapper
{
    public function foo (&...$args) {
        return $this->dostuff(...$args);
    }

    public function dostuff($param1, $param2, &$arr) {
        $arr[] = $param1;
        $arr[] = $param2;

        return count($arr);
    }
}


$values = [1,2];
$a=3;
$b=4;
$obj = new Wrapper();
#all parameter must be variables here because there are by ref now
$count = $obj->foo($a,$b, $values);

echo "Elements count: $count\r\n";
print_r($values); //Expected [1,2,3,4]

输出

Elements count: 4
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
)

参见:https://www.php.net/manual/en/functions.arguments.php示例#13

Php相关问答推荐

p a/a/p的x路径 Select ,但不是p somethext a链接/a或某些文本/p>

在WooCommerce Checkout帐单地址字段后插入自定义按钮

无法使用DOMPDF在PDF中呈现非ANSI字符

PHP:从数组中获取唯一的数字组合

WooCommerce中仅在单一产品和产品档案页面中将小数设置为大写

在函数内部获取一致的单选按钮值以更新WordPress用户数据

照明\Support\Collection::Filter():参数#1($Callback)的类型必须为?可调用、已给定数组、已调用

如何在函数中定位WooCommerce产品循环

允许在WooCommerce管理员优惠券列表中显示自定义优惠券类型

WooCommerce-在选定类别中每消费X个金额即可添加免费礼物

使用MySQLi使用连接字符串设置字符集

如何在Livewire 3 Form类中做依赖注入?

模式 bootstrap 未显示

Laravel 10中的Validator类

Laravel处理belongToMany和额外字段

将自定义字段添加到管理产品中 WooCommerce 3.2+ 中的快速编辑

Wordpress,配置一周第一天选项

标签打印机的 CSS

调度程序不发送任何消息

产品页面自定义复选框可对 WooCommerce 购物车小计启用百分比折扣