首页 > 作文

PHP 语法引用使用及实现

更新时间:2023-04-08 12:19:33 阅读: 评论:0

说明

这里基于 php7.2.5 进行测试,php7 之后内部结构变化应该不是太大,但与 php5.x 有差别。

什么是引用

在 php 中引用是一种数据类型 (结构),是指 指向同一个类型的数据结构,来看具体存储结构

struct _zend_reference {  // 引用计数用于垃圾回收  先忽略    zend_refcounted_h gc;   // zval是另一个变量  zval还记得吗 存储变量的结构  // 这里val指向另一个zval    zval              val;};

  

忘了的这里看 zval

如何使用

// 定义变量$a = "hello";// &生成引用变量$b = &$a;echo $b;echo php_eol; php hello.phphello

  

结果大家都知道,$b 与 $a 的值是相美满的反义词同的,而且你还知道,修改 $b 同时也会作用与 $a.

$a = "hello";$b = &$a;echo "b:".$b;e小学开学典礼主持词cho php_eol;$b = "world";echo "a:".$a;echo php_eol; php hello.phpb:helloa:world

  

如何实现

回忆 zval 的格式执行第一句时,生成的数据结构是这样的 (简版示意图,真实结构复杂)

当执行 $b = &$a 时,&$a 会先生成引用类型的数据结构,然后引用的班组鉴定范文 zval 指向之前的 hello 的结构,$a,$b 则共同指向引用结构。

那么在修改 $b 时,实际是修改了引用类型指向的 zend_value,所以导致 $a 的值也发生了变化。

小结

php 中使用 & 生成一个引用类型的数据,这个引用的 zval 指向原变量所指向的 zval, 变量则会指向这个应用结构,当发生引用赋值之后,被赋值的变量也会指向这个引用,更改其中任何一个变量,所有的变量都会发生变化。类似于你大名叫大壮,小名叫小壮,但是身份证都是 xxoo100, 无论修改大壮还是小壮的身份证,他始终只有一个身份证。

扩展

我们可能听过取地址符这么一种说法,那么在 c 语言或者 go 中,通过使用 & 可以获取到变量的内存地址。

#include <stdio.h>#include<string.h>int main(){    char str[] = "hello";  // &获取变量的内存地址    printf("%p\n", &str);} gcc pointer.c -o pointer./po英语美文摘抄inter0x7ffee6d3292a

  

但是 php 的 & 并不是获取变量的地址,这是需要注意的。

unt 引用变量

unt($b);echo "a:".$a;echo php_eol;echo "b:".$b;echo php_eol; php hello.phpa:worldphp notice:  undefined variable: b

  

unt ($b) 之后,只是销毁了变量 b 及 b 对引用的指向,没有影响 $a。

foreach 中的引用

$list = [    ['id' => 3, 'total' => 3],    ['id' => 4, 'total' => 4],    ['id' => 5, 'total' => 5],];foreach ($list as $key => &$info) {    $info['total'] = $info['total'] + 3;}print_r($list);// 一顿操作$info['name'] = "hello";print_r($info); php hello.phparray(    [0] => array        (            [id] => 3            [total] => 6        )    [1] => array        (            [id] => 4            [total] => 7        )    [2] => array        (            [id] => 5            [total] => 8        ))array(    [id] =>黄柏的作用与功效 5    [total] => 8    [name] => hello)

  

这里在 foreach 之后需要把 info unt 掉防止发生数据问题。

总结

php 中通过 & 获取对变量的引用,实质是多个变量通过中间引用类型(不是指向内存地址),指向同一个值。

php高级开发工程师简历打造,祝你金三银四跳槽加薪

本文发布于:2023-04-08 12:19:32,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/8271b6e2ead06fd6f55f6c7d904b8b2e.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:PHP 语法引用使用及实现.doc

本文 PDF 下载地址:PHP 语法引用使用及实现.pdf

下一篇:返回列表
标签:变量   结构   类型   地址
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图