zoukankan      html  css  js  c++  java
  • [学习]php 赋值

    php赋值

    普通赋值

    通过=进行赋值。

    对于数字,字符串,布尔值,null,数组等,用=将原变量的值拷贝到新变量中(传值赋值),所以改变其中一个并不影响另一个。

    但是对于对象,用=赋值,不是拷贝,而是对对象的引用(也不是引用赋值,类似于js中的对象赋值)。

    例子

    // php 版本5.6.9
    $a = 123;
    $b = $a;
    $a = 456;
    print $b; // 123
    
    $aa = array( 0 => 123);
    $bb = $aa;
    $aa[0] = 456;
    print $bb[0]; // 123
    
    
    // 对象赋值 -- 使用php手册中的例子
    class SimpleClass {}
    $instance = new SimpleClass(); // new 操作符返回的是对所创建对象的引用
    
    $assigned   =  $instance; // 普通赋值 
    $reference  =& $instance; // 引用赋值
    
    $instance->var = '$assigned will have this value';
    
    $instance = null; // $instance and $reference become null. 改变$instance的值,$assigned的值并没有变化,所以对象的普通赋值不能说就是引用赋值。$reference的赋值才是真正的引用赋值:改变$instance的值,$reference的值跟着变。
    
    var_dump($instance); // null
    var_dump($reference); // null
    var_dump($assigned); // SimpleClass 对象
    
    

    对于对象的赋值可以这么理解

    首先,将PHP中的变量看成是一个一个的数据槽。这个数据槽可以保存一个基本类型(int、string、bool等)。创建引用时,这个槽里保存的是内存地址,或者说是指向引用对象的一个指针,引用没有拷贝操作,仅仅是将指针指向了原变量(参考数据结构)。创建普通赋值时,则是拷贝的基本类型。
    而对象则与基本类型不同,它不能直接保存在数据槽中,而是将对象的“句柄”保存在了数据槽。这个句柄是指向对象特定实例的标识符。虽然句柄不是我们所能直观操作的类型,但它也属于基本类型。
    当你获取一个包含对象句柄的变量,并将其分配给另一个变量时,另一个变量获取的是这个对象的句柄。(注意,不是引用!不是引用!不是引用!!)。通过句柄,两个变量都可以修改同一个对象。但是,这两个变量并没有直接关系,它们是两个独立的变量,其中一个变量修改为其他值时,并不会对另一个变量产生影响。只有该变量在修改对象内部的内容时,另一个变量因为持有相同的句柄,所以它的对象内容也会相应地发生改变。

    php官方手册中关于对象和引用的解释。

    引用赋值

    使用=&进行引用赋值。

    php手册的例子:

    // php 版本5.6.9
    $a = 3;
    $b = &$a; // $b 是 $a 的引用
    
    print "$a
    "; // 输出 3
    print "$b
    "; // 输出 3
    
    $a = 4; // 修改 $a
    
    print "$a
    "; // 输出 4
    print "$b
    "; // 也输出 4,因为 $b 是 $a 的引用,因此也被改变
    
    
  • 相关阅读:
    数据库学习之四--Join, Left Join, Right Join, Full Join对比
    数据库学习之三--Select查询及运算符
    数据库学习之二--SQL语句以及数据类型
    随身笔记 Python中__init__和self的意义和作用
    爬虫Request Header请求头各参数含义
    爬虫中的Header请求头 在浏览器中通过F12和F5分析
    爬虫中的User-Agent 使用与作用
    Maven build 命令介绍(转)
    Linux 确定tomcat的运行状态命令
    Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are already in use.解决办法
  • 原文地址:https://www.cnblogs.com/fogwind/p/15190716.html
Copyright © 2011-2022 走看看