关于变量和函数前&符号的作用
首先看一下下面的例子
<?php
$a="val1";
$b="val2";
$a=&$b;
echo $a."<br/>";
$b="123";
echo $a;
?>
上述的例子中如果将代码的$a=&$b换成$a=$b则$a的两次输出的值都是相同的但是添加了&符号则将$b和$a的内存地址指向了相同的内存,所以更改了$b $a也会跟着改变!如果$a的值改变则$b的输出也会相应的进行改变!
再看一下下面的这个例子
<?php function &test()
{
static $b=0;//申明一个静态变量
$b=$b+1;
echo $b;
return $b;
} $a=test();//这条语句会输出 $b的值 为1
$a=5;
$a=test();//这 条语句会输出 $b的值 为2
$a=&test();//这条语句会输出 $b的值 为3
$a=5;
$a=test(); //这条语句会输出 $b的值 为6 ?>
通过这种方式$a=test();得到的其实不是函数的引用返回,这跟普通的函数 调用没有区别.
至于原因: 这是PHP的规定
php规定通过$a=&test(); 方式得到的才是函数的引用返回.
至于什么是引用返回呢(PHP手册上说:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。)
用上面的例子来解释就是
$a=test()方式调用函数,只是将函数的值赋给$a而已, 而$a做任何改 变 都不会影响到函数中的$b.
而通过$a=&test()方式调用函数呢, 他的作用是将return $b中的 $b变量的内存地址与$a变量的内存地址,
指向了同一个地方. 即产生了相当于这样的效果($a=&b;) 所以改变$a的值,也同时改变了$b 的值 ,所以在执行了:
$a=&test(); $a=5; 以后,$b的值变为了5。
关于变量和函数前&符号的作用的更多相关文章
- C++ 成员函数前和函数后加const修饰符区别
博客转载自: https://www.iteblog.com/archives/214.html 分析以下一段程序,阐述成员函数后缀const 和 成员函数前const 的作用 #include< ...
- php中函数前加&符号的作用分解
这篇文章主要介绍了php中的函数前加&符号的作用分解,其作用叫做引用返回,有点抽象,详细解释请看本文内容,需要的朋友可以参考下 (转载) php变量前面加&符号是什么意思就不用多说了 ...
- 成员变量和成员函数前加static的作用?
成员变量和成员函数前加static的作用?答:它们被称为常成员变量和常成员函数,又称为类成员变量和类成员函数.分别用来反映类的状态.比如类成员变量可以用来统计类实例的数量,类成员函数负责这种统计的动作 ...
- php的引用&(就是在变量或者函数、对象等前面加上&符号)
官方文档: 1.引用是什么:http://www.php.net/manual/zh/language.references.whatare.php 2.引用做什么:http://www.php.ne ...
- js函数前加分号和感叹号的作用
js函数前加分号和感叹号是什么意思?有什么用? 一般看JQuery插件里的写法是这样的 (function($) { //... })(jQuery); 今天看到bootstrap的javascrip ...
- 数据结构和算法(Golang实现)(2)简单入门Golang-包、变量和函数
包.变量和函数 一.举个例子 现在我们来建立一个完整的程序main.go: // Golang程序入口的包名必须为 main package main // import "golang&q ...
- jQuery源码笔记(二):定义了一些变量和函数 jQuery = function(){}
笔记(二)也分为三部分: 一. 介绍: 注释说明:v2.0.3版本.Sizzle选择器.MIT软件许可注释中的#的信息索引.查询地址(英文版)匿名函数自执行:window参数及undefined参数意 ...
- shell脚本中常见的一些特殊符号和作用详解
这篇文章主要介绍了shell脚本中常见的一些特殊符号和它的作用详解,总结的很简洁,容易看懂,需要的朋友可以参考下 在编写Shell脚本时,我们需要会用到各种各样的特殊符号,通过这些特殊符号可以使我 ...
- jQuery源码逐行分析学习02(第一部分:jQuery的一些变量和函数)
第一次尝试使用Office Word,方便程度大大超过网页在线编辑,不过初次使用,一些内容不甚熟悉,望各位大神见谅~ 在上次的文章中,把整个jQuery的结构进行了梳理,得到了整个jQuery的简化结 ...
随机推荐
- Rank() 、DENSE_RANK()、NTILE(n)的用法-转
Rank() over()/DENSE_RANK() over()的用法 1.Rank() over()/DENSE_RANK() over() 这两个函数与ROW_NUMBER()函数类似,因为 ...
- iOS安全相关学习资料
https://github.com/zhengmin1989/iOS_ICE_AND_FIRE (冰与火代码) http://weibo.com/zhengmin1989?is_hot=1 (蒸米 ...
- redis集群报错
写入redis集群报错:(error) MOVED 6918 解决方法:redis-cli -c -p 7001 -h 10.0.0.104
- 山锅(samgor)的博客 2014
搞移动端的前端开发已经3年,悄悄地从一个前端小白变成老油条. 项目已经做了好几个,最近发现技术的提升貌似停滞不前.说很菜吧,知道的还是不少.说精通吧,自我感觉还算不上. 认真的考虑下这个问题,觉得技术 ...
- daydayup2 codeforces143D
这题很考察分析 题意:让你构造n*m的矩阵,使得不存在两个点的距离的平方为5 1若n=1 ,答案为m 2若m=1,答案为n 3若n=2 则这样 110011001100.. 110011001100 ...
- 160个crackme-之Afkayas.1
工具: OD 环境: windows XP 运行: 我们先运行一下这个小程序,看看它到底是干什么的.运行后发现它要我们输入Type In your Name 和Type In your Serial ...
- 自制c#简易计算器
这是一个课堂作业,我觉得作为一个简易的计算器不需要态度复杂的东西,可能还有一些bug,有空再慢慢加强. using System;using System.Collections.Generic;us ...
- 计算机网络(8)-----TCP报文段的首部格式
TCP报文段的首部格式 概述 TCP报文段首部的前20个字节是固定的,因此TCP首部的最小长度是20字节. 源端口和目标端口 各占2个字节,分别写入源端口号和目的端口号. 序列号 占4个字节,表示本报 ...
- equals和“==”
Integer a = new Integer("3"); Integer b = new Integer(3); System.out.println(a==b); System ...
- List<T>的对比
对于类型的对比,linq原来的对比是区分不了的. 对两个list进行查询交集方法.交集,并集的函数是直接用Linq的,这里不再写. List<T> intersectList = quer ...