Gitlib Gitlib
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)

Ravior

以梦为马,莫负韶华
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)
  • PHP

    • PHP-FPM使用指南
    • PHP7新特性总结
    • PHP安全编程
    • PHP安全配置总结
    • PHP变量的值类型和引用类型
      • PHP标准规范PSR
      • PHP操作Zookeeper实践
      • PHP错误和异常处理机制详解
      • PHP的Session运行机制
      • PHP底层运行机制和原理
      • PHP反射模拟实现注解路由
      • PHP高级用法总结
      • PHP开发常用文档总结
      • PHP开发入门:Memcached扩展安装
      • PHP开发入门:PHP7安装部署
      • PHP开发入门:Redis扩展安装
      • PHP开发SPL总结
      • PHP框架常见URL模式
      • PHP扩展开发入门
      • PHP垃圾回收机制
      • PHP类的自动加载
      • PHP输入输出流
      • PHP微服务开发指南
      • PHP协程
      • PHP写时拷贝技术
      • PHP性能优化之Opcache
      • PHP依赖注入和控制反转
      • PHP运行模式(SAPI)
      • PHP中file_get_contents与curl区别
      • RPC的简单实现
      • Protobuf:高效数据结构化工具
      • P3P协议详解
      • Laravel之集合(Collection)总结
      • Laravel实践总结
      • Laravel之ORM总结
      • 中高级PHP实践总结
      • PHP Socket编程实战
    • Golang

    • Python

    • Javascript

    • 其他语言

    • 编程语言
    • PHP
    Ravior
    2016-10-08
    目录

    PHP变量的值类型和引用类型

    PHP变量在内存中保存的并不直接是值的内容而是值的地址,比如:

    $a = 1;
    
    1

    从表面上看起来似乎是$a直接存储了1这个值,但是实际情况是,PHP解释器创建了变量$a,将值1存入内存中的某个地方,再将值的地址存到变量中,需要取值时,先找到变量中$a的地址,再根据地址找到变量的值。

    比如:

    echo $a;
    
    1

    当我们执行上面这个语句时,会输出1 ,但是PHP解释器会完成这样一段代码:找到$a中存储的地址(即:先取$a的地址),根据地址找到存在内存中某个地方的值,最后输出。

    用代码表示一下这个过程:

    $a = 1;
    $b = &$a;
    
    1
    2

    我们看到上面出现了一个&符号,这个符号是取地址符,可以取出变量$a中存的地址,并存储到变量$b中,再使用输出语句:

    echo $b;
    
    1

    结果也是输出1 ,PHP 解释器先取出$b 中存的地址,再根据地址找到值。下面我们再做一个演示:

    $a = 1;
    $b = &$a;
    $a = 2;
    echo $b;
    
    1
    2
    3
    4

    会发现改变$a的值,$b的值也跟着改变了,其实改变$b的值,$a的值也会随着改变。

    到这一步,我们能确定的是在$a和$b中存储了相同的地址,所以,他们指向的值也是一样的。

    结论1:如果两个变量存储了相同的地址,它们就是同一个变量。

    下面我们来看一下值类型和引用类型。

    先看一段代码:

    $a = 1;
    $b = $a;
    $a = 2;
    echo $b; // 输出 1
    
    1
    2
    3
    4

    将$a赋值给$b,改变$a的值,$b的值不变,根据上面我们得到的结论,$a和$b是两个不同的变量,指向不同的地址。

    结论2:赋值时会创建不同的变量的形式称之为值类型。

    再看一段代码:

    class User {
       public $name = "Tome";
    }
     
    $a = new User();
    $b = $a;
    $a->name = "Joe";
     
    echo $b->name;// 输出 Joe
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

    在这里我们同样把$a的值赋值给$b,改变$a后,$b的值也跟着发生了变化,根据结论1我们知道$a和$b是同一个变量,指向相同的地址。

    结论3:赋值时不会创建新的变量的形式称之为引用类型。

    # 总结

    在PHP中字符串、整型、浮点、数组等这些都是值类型,而类和对象是引用类型。

    #PHP
    上次更新: 2022/12/02, 22:04:34
    PHP安全配置总结
    PHP标准规范PSR

    ← PHP安全配置总结 PHP标准规范PSR→

    最近更新
    01
    常用游戏反外挂技术总结
    11-27
    02
    Golang开发实践万字总结
    11-11
    03
    Redis万字总结
    10-30
    更多文章>
    Theme by Vdoing | Copyright © 2011-2022 Ravior | 粤ICP备17060229号-3 | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式