php中&引用的作用


在C++中引用变量只是被引用变量的别名,他们同时指向的都是同一片内存空间。

变量上的引用

php的引用允许你用两个变量指向同一个内容

$a = 123;
$b = &$a;

echo $b;

$b = 456;

echo $a;

上面这个代码,定义了 a 的 值 为 123 , a的值为123, a123b引用了 a 所 以 他 们 两 个 指 向 的 是 同 一 个 内 容 , 第 一 次 输 出 a所以他们两个指向的是同一个内容,第一次输出 ab也就是输出 a 的 值 , 当 a的值,当 ab的值发生变化时,因为指向的是同一个内容,所以$a也发生相同的变化,a输出就是456

函数上的引用

函数的引用

函数的引用相当于变量引用的升级版,此时的被引用变量放在了函数里面。

function &test() {
    static $a = 0;

    $a = $a + 1;
    echo $a."\n";
    return $a;
}

$b = test();
$b = 456;
test();


$b = &test();
$b = 456;
test();

ps:函数引用必须要注意以下两点
1.函数名字加上了引用标记
2.返回必须是被引用的变量,不能是常量

上面代码定义了一个函数test,里面设置了一个静态变量,每次执行都会进行加1的操作。

下方第一段代码:
执行test函数把执行完以后的值赋值到b上,更改b的值,然后再执行test函数,观测a的值是否被b改变了,结果显示a的输出1,2。
如果使用函数的时候没有加上&引用则会当成正常的函数来使用。

下方第二段代码:
引用执行test函数并赋值到b上,更改b的值,然后再执行test函数,观测a的值是否被b改变了,结果显示a输出3,457。
很明显b引用了函数里面a的值,当b的值发生变化时,a的值也发生了变化。

函数的传值引用

这个传值引用跟变量引用有点类似

function test(&$a) {

    $a = $a + 100;
    echo $a."\n";
}

$b = 1;
test($b);

echo $b;

上方定义了一个test函数,里面的参数用的是引用参数,接着定义了一个值为1的变量b,将b当做test的参数进行执行test函数,test函数的形参a就引用了b的值,此时形参a和变量b指向的都是同一片内存地址,当a的值发生变化时,b也会跟着a一起变化。所以结果输出为101

对象中的引用

class a {
    public $param = 123;
}

$b = new a();

$c = $b;
$d = &$b;
$e = clone $b;

echo $b->param.PHP_EOL;//123
echo $c->param.PHP_EOL;//123
echo $d->param.PHP_EOL;//123
echo $e->param.PHP_EOL;//123

$c->param = 456;

echo $b->param.PHP_EOL;//456
echo $c->param.PHP_EOL;//456
echo $d->param.PHP_EOL;//456
echo $e->param.PHP_EOL;//123

上方代码定义了一个类为a
b是a的实例化对象,c是b的赋值,d是b的引用,e是b的克隆
当在类中的变量值不改变得时候,输出都是123

当把c对象中的变量值改为456以后,b,c,d的输出都变成了456,只有e的值没有改变。

结论:对象的赋值其实就是对象的引用,如果想要拷贝一个变量,则需要用clone方法进行拷贝;

引用的作用

  1. 可以通过别名访问某个对象或变量
  2. 可以减少内存使用量
  3. 引用函数作用特别大,当函数里变量的对象会随着外面的更改而更改
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值