php引用地址改变变量值的问题

代码如下:

<?php
$foo = 'Bob'; // 将 'Bob' 赋给 $foo
$bar = &$foo; // 通过 $bar 引用 $foo
echo $foo.'<br/>';
$bar = "My name is $bar"; // 修改 $bar 变量
echo $bar.'<br/>';
echo $foo.'<br/>'; // $foo 的值也被修改
?>

输出:
Bob
My name is Bob
My name is Bob
我们看到原始值确实被修改了,发生在引用之后并被赋值之后,但被赋值之前则原始变量不会改变

(0)

相关推荐

  • 浅谈PHP变量作用域以及地址引用问题

    作用域的概念: 在PHP脚本的任何位置都可以声明变量,但是,声明变量的位置会大大影响访问变量的范围.这个可以访问的范围称为作用域. 主要的常用的包括:局部变量.全局变量.静态变量. 1.局部变量:就是在函数内声明的变量,他保存在内存的栈内,所以访问速度很快.仅在函数内有效. 2.全局变量:与局部变量相反,全局变量可以在程序的任何地方访问.只要在变量前面加关键字GLOBAL,就可以将其识别为全局变量.在整个php文件内有效. 3.静态变量:用static修饰只存在于函数作用域的变量,函数执行结束后

  • PHP变量的定义、可变变量、变量引用、销毁方法

    复制代码 代码如下: <?php$long="big_long_variable_name";$$long="PHP";     /* 用存放在变量$long里的字符串作为新变量的变量名,等同于$big_long_variable_name="PHP"; */$short=& $big_long_variable_name;  /* 取变量$big_long_variable_name的值赋给变量$short,此时$short的值为

  • PHP对象相互引用的内存溢出实例分析

    通常来说使用脚本语言最大的好处之一就是可利用其拥有的自动垃圾回收机制来释放内存.你不需要在使用完变量后做任何释放内存的处理,因为这些PHP会帮你完成. 当然,我们可以按自己的意愿调用 unset() 函数来释放内存,但通常不需要这么做. 不过在PHP里,至少有一种情况内存不会得到自动释放,即便是手动调用 unset().详情可考PHP官网关于内存泄露的分析:http://bugs.php.net/bug.php?id=33595. 问题症状如下: 如果两个对象之间存在着相互引用的关系,如"父对象

  • php中引用&的用法分析【变量引用,函数引用,对象引用】

    本文实例分析了php中引用&的用法.分享给大家供大家参考,具体如下: php的引用(就是在变量或者函数.对象等前面加上&符号) //最重要就是 删除引用的变量 ,只是引用的变量访问不了,但是内容并没有销毁 在PHP 中引用的意思是:不同的名字访问同一个变量内容. 变量的引用 PHP 的引用允许你用两个变量来指向同一个内容 <?php $a="ABC"; $b =&$a; echo $a;//这里输出:ABC echo $b;//这里输出:ABC $b=&q

  • php面向对象全攻略 (三)特殊的引用“$this”的使用

    7.特殊的引用"$this"的使用 现在我们知道了如何访问对象中的成员,是通过"对象->成员"的方式访问的,这是在对 象的外部去访问对象中成员的形式,那么如果我想在对象的内部,让对象里的方法访问本对 象的属性,或是对象中的方法去调用本对象的其它方法这时我们怎么办?因为对象里面的所 有的成员都要用对象来调用,包括对象的内部成员之间的调用,所以在PHP 里面给我提供了 一个本对象的引用$this,每个对象里面都有一个对象的引用$this 来代表这个对象,完成对象

  • PHP中函数内引用全局变量的方法

    先看下面的代码: 复制代码 代码如下: <?php $var1 = "#####"; $var2 = "&&&&&"; function global_references($use_globals) { global $var1, $var2; if (!$use_globals) { $var2 =&$var1; //1 } else { $GLOBALS["var2"] =&$v

  • php函数间的参数传递(值传递/引用传递)

    php:函数间的参数传递 1.值传递 复制代码 代码如下: <?php function exam($var1){ $var1++: echo "In Exam:" . $var1 . "<br />"; } $var1 = 1; echo $var1 . "<br />"; exam($var1); echo $var1 . "<br />"; ?> -------------

  • PHP对象递归引用造成内存泄漏分析

    通常来说,如果PHP对象存在递归引用,就会出现内存泄漏.这个Bug在PHP里已经存在很久很久了,先让我们来重现这个Bug,示例代码如下: <?php class Foo { function __construct() { $this->bar = new Bar($this); } } class Bar { function __construct($foo) { $this->foo = $foo; } } for ($i = 0; $i < 100; $i++) { $ob

  • php中引用符号(&)的使用详细介绍

    与C语言中的指针是有差别的.C语言中的指针里面存储的是变量的内容在内存中存放的地址变量的引用. PHP 的引用允许你用两个变量来指向同一个内容 $a="ABC"; $b =&$a; echo $a;//这里输出:ABC echo $b;//这里输出:ABC $b="EFG"; echo $a;//这里$a的值变为EFG 所以输出EFG echo $b;//这里输出EFG 函数的传址调用 传址调用我就不多说了 下面直接给出代码 <?php functio

  • php引用地址改变变量值的问题

    复制代码 代码如下: <?php $foo = 'Bob'; // 将 'Bob' 赋给 $foo $bar = &$foo; // 通过 $bar 引用 $foo echo $foo.'<br/>'; $bar = "My name is $bar"; // 修改 $bar 变量 echo $bar.'<br/>'; echo $foo.'<br/>'; // $foo 的值也被修改 ?> 输出: Bob My name is

  • 基于c的for循环中改变变量值的问题

    不知道何时起, 非常刻意避免在 for 循环体内改变变量值. 似乎是受别人观点影响, 但却并不知晓原因.可是有时候用其他方法替代却不方便, 自己试了一下, 或许找到了一丝差异.用这种方法赋值时, 没有出现问题: 复制代码 代码如下: #include <stdio.h>int main(){ int i; for(i=0; i<10; i++) {  i = i+2;  printf("%d/n", i); } return 0;} 但是另外一种赋值方法, 却是不行的

  • WPF实现slide控件拖动完成后改变变量值

    WPF中使slide控件拖动完成后改变变量值这个问题一开始觉得还是挺简单的,网上也看到不少解决方案. 首先一个最简单最直接的方案就是自定义一个名为FinalValue的依赖属性.随后重载OnThumbDragCompleted函数,在Thumb控件完成拖动时改写FinalValue.代码如下 public class SliderIgnoreDelta : Slider { public int FinalValue { get { return (int)GetValue(FinalValue

  • python 实现两个变量值进行交换的n种操作

    python 两个变量值交换 方法一: c = 0 c= a a= b b= c 方法二: a,b = b,a 这是python的基本方法 方法三:(只用两个变量实现) a = a+b b = a-b a = a-b python两个数值互换(浅析a,b=b,a原理) python交换两个值得方法非常简单,即a,b=b,a,一步操作就交换了两个值,那么这是为什么呢? 真相: Python的变量并不直接存储值,而只是引用一个内存地址,交换变量时,只是交换了引用的地址. 先看下面这段程序: impo

  • PHP实现函数内修改外部变量值的方法示例

    本文实例讲述了PHP实现函数内修改外部变量值的方法.分享给大家供大家参考,具体如下: 直接上代码,如下: $a_str = 'ab'; function change_val(){ global $a_str; // 通过设置全局变量,修改变量值 //$a_str = 'abc'; $a_str = $a_str.'abc'; } echo $a_str."<br>"; change_val(); echo $a_str."<br>"; ec

  • Java 反射修改类的常量值、静态变量值、属性值实例详解

    前言 有的时候,我们需要修改一个变量的值,但变量也许存在于 Jar 包中或其他位置,导致我们不能从代码层面进行修改,于是我们就用到了下面的场景,通过反射来进行修改变量的值. 定义一个实体类 class Bean{ private static final Integer INT_VALUE = 100; } 利用反射修改私有静态常量方法 System.out.println(Bean.INT_VALUE); Field field = Bean.class.getField("INT_VALUE

  • Java修改Integer变量值遇到的问题及解决

    目录 Java 修改Integer变量值 下面我尝试了两种方法去改变Integer的整型值 看看源码 Integer值比较需要注意的问题 原因 解决办法 Java 修改Integer变量值 对于Integer变量来说,比较变量值常见情形如下: Integer a = 1000; Integer b = 1000; Integer c = 100; Integer d = 100; System.out.println(a == b); System.out.println(c == d); "=

  • JavaScript交换两个变量值的七种解决方案

    前言 这篇文章总结了七种办法来交换a和b的变量值 var a = 123; var b = 456; 交换变量值方案一 最最最简单的办法就是使用一个临时变量了,不过使用临时变量的方法实在是太low了 var t; t = a; a = b; b = t; 首先把a的值存储到临时变量中,然后b赋值给a,最后拿出临时变量中的a值赋给b,这个办法是最基本的了 交换变量值方案二 下面的方案都不会有临时变量,我总结了一下,其实不使用临时变量的思路都是让其中一个变量变成一个a和b都有关系的值,这样可以先改变

  • Java反射如何修改private final成员变量值

    大家都知道使用java反射可以在运行时动态改变对象的行为,甚至是private final的成员变量,但并不是所有情况下,都可以修改成员变量.今天就举几个小例子说明. 基本数据类型 /** * @author Cool-Coding 2018/5/15 */ public class ReflectionUsage {private final int age=18; public int getAge(){ return age; } } 测试代码: import java.lang.refl

  • Java 不使用第三方变量交换两个变量值的四种方法详解

    目录 变量本身交换数值 算术运算 指针地址操作 位运算 简单总结 哈喽,大家好,我是阿Q.前几天有个小伙伴去面试,被面试官的一个问题劝退了:请说出几种不使用第三方变量交换两个变量值的方法. 问题有点绕,好不容易缕清了面试官的问题,却发现答不上来.一时间尴尬无比,只能硬着头皮说不会. 遇到交换变量值的问题,通常我们的做法是:定义一个新的变量,借助它完成交换. 代码如下: t = a; a = b; b = t; 但问题的重点是"不使用第三方变量",那就变得"可爱"起来

随机推荐