如果一定要传递数组的引用,PHP7 里面咋整(已解)

PHP
图中代码在浏览器中可以正常运行,但是跑到 PHP 里面却成了死循环。因为数组在 js 中是按引用传值的,但在 PHP 中却是按值传递的。

使用 & 符合可以强制数组传递引用,如下所示

function fetch($arr)
{
    return array_pop($arr);
}

function exist($n)
{
    return $n ?: false;
}

$arr = array(1, 2, 3, 4, 5, 6);  // v5.3 不能使用 []
while (exist(fetch(&$arr))) {    // 必须加上 &
    print_r($arr);
}

但是这么做的缺点很明显,首先定义数组比较麻烦,不能使用 [ ] 了。更重要的是使用 & 传递引用的办法只能适用于 PHP5.3 及以下的版本

PHP

如果一定要传递数组的引用,PHP7、8 里面咋整?感谢 php_yt 指点迷津!虽然高级版本不支持调用时加 & 的写法,但却支持函数定义时添加 & 的写法(详细代码如4楼所示)

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 11

正确姿势是function fetch(&$arr) fetch($array)

1年前 评论
php_yt (作者) 1年前
php_yt (作者) 1年前
zhaiduting (楼主) 1年前
zhaiduting (楼主) 1年前

找个Collection的第三方包 或者自己手写一个,把数组包一层对象就好了。

不过你的例子 array_pop 第一个参数不是本身就引用的么

1年前 评论
zhaiduting (楼主) 1年前

:grin: php的引用是加在形参里的, 传参时候不用加&符号

1年前 评论
zhaiduting (楼主) 1年前
╰ゝSakura

注意 fetch函数的定义和传参

<?php
function fetch(&$arr)
{
    return array_pop($arr);
}

function exist($n)
{
    return $n ?: false;
}

$arr = array(1, 2, 3, 4, 5, 6); 
while (exist(fetch($arr))) { 
    print_r($arr);
}
1年前 评论

感谢大家的回复,问题已解。1楼的方法最简,详细代码如4楼所示

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
63
粉丝
17
喜欢
140
收藏
118
排名:132
访问:7.4 万
私信
所有博文
社区赞助商