若问生涯原是梦,除梦里,没人知。

PHP代码之使用引用

php

在PHP 中引用的意思是:不同的名字访问同一个变量内容。php的引用(就是在变量或者函数、对象等前面加上&符号)最重要就是删除引用的变量,只是引用的变量访问不了,但是内容并没有销毁。

场景一:遍历一个数组获取新的数据结构

也许你会这样写:

// 申明一个新的数组,组装成你想要的数据
$tmp = [];
foreach ($arr as $k => $v) {
    // 取出你想要的数据
    $tmp[$k]['youwant'] = $v['youwant'];
    ...
    // 一系列判断得到你想要的数据
    if (...) {
        $tmp[$k]['youwantbyjudge'] = 'TIGERB';
    }
    ...
}
// 最后得要你想要的数组$tmp
-------------------------------------------------------
// 也许你觉着上面的写法不是很好,那我们下面换种写法
foreach ($arr as $k => $v) {
    // 一系列判断得到你想要的数据
    if (...) {
        // 复写值为你想要的
        $arr[$k]['youwantbyjudge'] = 'TIGERB'
    }
    ...
    // 干掉你不想要的结构
    unset($arr[$k]['youwantdel']);
}
// 最后我们得到我们的目标数组$arr

接下来我们使用引用值:

foreach ($arr as &$v) {
    // 一系列判断得到你想要的数据
    if (...) {
        // 复写值为你想要的
        $v['youwantbyjudge'] = 'TIGERB'
    }
    ...
    // 干掉你不想要的结构
    unset($v['youwantdel']);
}
unset($v);
// 最后我们得到我们的目标数组$arr

使用引用是不是使我们的代码更加的简洁,除此之外相对于第一种写法,我们节省了内存空间,尤其是再操作一个大数组时效果是及其明显的。

场景二:传递一个值到一个函数中获取新的值

基本和数组遍历一致,我们只需要声明这个函数的这个参数为引用即可,如下:

function decorate(&$arr = []) {
    # code...
}
$arr = [
    ....
];
// 调用函数
decorate($arr);
// 如上即得到新的值$arr,好处还是节省内存空间

目录[+]