zoukankan      html  css  js  c++  java
  • PHP变量的值类型和引用类型

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

    $a = 1;

    从表面上看起来似乎是 $a 直接存储了 1 这个值。但是实际情况是,PHP 解释器创建了变量 $a ,

    将值 1 存入内存中的某个地方,再将值的地址存到变量中。

    需要取值时,先找到变量中 $a 的地址,再根据地址找到变量的值。

    比如:

    echo $a;

    当我们执行上面这个语句时,会输出 1 ,但是 PHP 解释器会完成这样一段代码:找到 $a 中存储

    的地址(即:先取 $a 的地址),根据地址找到存在内存中某个地方的值,最后输出屏幕上。

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

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

    我们看到上面出现了一个 & 符号,这个符号是取地址符,可以取出变量 $a 中存的地址,并存储到变量

    $b 中,再使用输出语句:

    echo $b;

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

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

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

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

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

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

    先看一段代码:

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

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

    指向不同的地址。

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

    再看一段代码:

    class User {
       public $name = "Tome";
    }
    
    $a = new User();
    $b = $a;
    $a->name = "Joe";
    
    echo $b->name;// 输出 Joe

    在这里我们同样把 $a 的值赋值给 $b,改变 $a 后,$b 的值也跟着发生了变化,根据结论1我们知道 $a 和 $b

    是同一个变量,指向相同的地址。

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

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

  • 相关阅读:
    第三方接口开发规范
    项目经理、技术经理、team leader
    ibatis #和$符号的区别,传入字符串而不加引号
    WindowManager.LayoutParams详解
    AIDL 编译报can be an out parameter, so you must declare it as in, out or inout原因探究
    map里的keyset()和entryset()方法.
    android 使用代码实现 RelativeLayout布局
    Android中的Selector
    intentfilter 之 data 「scheme, host, port, mimeType, path, pathPrefix, pathPattern」
    找信息的方法
  • 原文地址:https://www.cnblogs.com/leeyongbard/p/9822805.html
Copyright © 2011-2022 走看看