php 地址传递,PHP引用符传递存储地址

关于php的引用(就是在变量或者函数、对象等前面加上&符号)的作用,我们先看下面这个程序。

代码如下:

$a = 100; //声明变量a

$b = &$a; //声明变量b,引用自变量a

echo "$a
";

echo "$b
";

$a++; //变量a自增1

echo "$a
";

echo "$b
";//查看变量b,也增加了1,说明使用的是同一存储单元

?>

程序运行结果:

100

100

101

101

很多人误解php中的引用跟C当中的指针一样,事实上并非如此,而且很大差别。C语言中的指针除了在数组传递过程中不用显式申明外,其他都需要使用*进行定义,而php中对于地址的指向(类似指针)功能不是由用户自己来实现的,是由Zend核心实现的,php中引用采用的是“写时拷贝”的原理,就是除非发生写操作,指向同一个地址的变量或者对象是不会被拷贝的。

php默认为传值传递:

代码如下:

$a = 20;

$b = $a;

$a = $a + 10;

echo $a.' and '.$b;

?>

程序运行结果:

代码如下:

30 and 20

要是想变为地址传递需要加&,既:

代码如下:

$a = 20;

$b = &$a;

$a = $a + 10;

echo $a.' and '.$b;

?>

程序运行结果:

代码如下:

30 and 30

也就是说,&把$a的地址传给了$b,这样的话这两个变量现在共享一个内存的存储区域,就是说它们的值是一样的。

同样的语法可以用在函数中,它返回引用,以及用在 new 运算符中:

代码如下:

$bar =& new fooclass();

$foo =& find_var($bar);

?>

引用做的第二件事是用引用传递变量。这是通过在函数内建立一个本地变量,并且该变量在呼叫范围内引用了同一个内容来实现的。说的通俗点就是一个函数的参数是一个本地变量的引用。下面再举例说明一下:

代码如下:<?php

function foo(&$val1, $val2) {

$val1 += 1;

$val2 += 1;

}

$a=5;

$b=10;

foo($a,$b);

echo $a;

echo $b;

?>

运行这段代码是给函数传递两个参数,一个是引用$a的内容,一个是$b的值,在执行此函数后,发现$a的内容改变了,而$b的内容则没有变化。

PHP引用的第三个用法是引用返回,这个用法理解起来有点难度,引用返回用在当你想用函数找到引用应该被绑定在哪一个变量上面时。当返回引用时,使用此语法:说的简单点,就还是引用函数的返回。但和参数传递不同,必须在函数定义和函数引用这两个地方都用 & 符号。下面举个例子:

代码如下:<?php

function &find_var ($param)

{

/* ...code... */

return $found_var;

}

$foo =& find_var ($bar);

$foo->x = 2;

?>

这个例子给$foo 赋值是函数find_var的返回引用,所以在给$foo->x赋值时就是给find_var的返回引用赋值,而不是简单的赋值。

PHP引用的最后一个用法是引用定位,主要有两个应用:一个是global 引用,当用 global $var 声明一个变量时实际上建立了一个到全局变量的引用。也就是和$var =& $GLOBALS["var"];是一样的。另外一个是$this的用法,在一个对象的方法中,$this 永远是调用它的对象的引用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/555507.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea创建多模块Springboot项目、导入多模块、删除多模块

前言 在eclipse中有Workspace&#xff08;工作空间&#xff09;和 Project&#xff08;工程&#xff09;的概念在 IDEA中只有 Project&#xff08;工程&#xff09;和 Module&#xff08;模块&#xff09;的概念。这个地方刚开始用的时候会很容易理不清它们之间的关系。在eclip…

php 高效缓存类,简单高效的文件缓存php类

简单高效的文件缓存php类class FileCache{public $keyPrefix ;public $cachePath ;public $cacheFileSuffix .bin;public $directoryLevel 1;public $gcProbability 10;public $fileMode;public $dirMode 0775;function __construct(){$this->cachePath HT::$cacheRo…

Java四种访问权限

java基础(七) java四种访问权限 引言 Java中的访问权限理解起来不难&#xff0c;但完全掌握却不容易&#xff0c;特别是4种访问权限并不是任何时候都可以使用。下面整理一下&#xff0c;在什么情况下&#xff0c;有哪些访问权限可以允许选择。 一、访问权限简介 访问权限控…

php表单提取,php – 使用RegEx提取表单字段

使用正则表达式解析HTML可能不是最好的方法.您可以查看DOMDocument::loadHTML,这将允许您使用DOM方法处理HTML文档(例如,如果您知道这些,则使用XPath查询).您可能还想看一下Zend_Dom和Zend_Dom_Query,顺便说一句,如果您可以在应用程序中使用Zend Framework的某些部分,这是非常好…

phpexcel.php实际应用,PHP操作excel的一个例子(原创)-PHP教程,PHP应用

这是对于那些只喜欢简单处理一下excel朋友来说的//定义一个excel文件$workbook "c:/my documents/test.xls";$sheet "sheet1";//生成一个com对象$ex$ex new com("excel.sheet") or die ("连不上&#xff01;&#xff01;&#xff01;&qu…

集成 websocket 的四种方案

集成 websocket 的四种方案 1. 原生注解 pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>WebSocketConfig package cn.coder4j.study.exampl…

java异常不懂,看不懂的异常提示啊

当前位置:我的异常网 Java Web开发 看不懂的异常提示啊看不懂的异常提示啊www.myexceptions.net 网友分享于&#xff1a;2013-09-12 浏览&#xff1a;7次看不懂的错误提示啊&#xff01;&#xff01;&#xff01;&#xff01;写的一个JSP程序&#xff0c;运行时提示如下错误…

包含内部类的.java文件编译后生成几个.class文件

如果一个类有内部类&#xff0c;编译将生成几个字节码文件&#xff0c;规则是怎样呢&#xff1f; 写在前&#xff0c;自己动手丰衣足食&#xff0c;结论只有个人实验支持&#xff0c;没有官方数据支持&#xff0c;欢迎自行查阅文档然后来指正&#xff0c;轻喷&#xff0c;谢谢…

java服务端无法发送给客户端,无法从客户端向服务器发送消息

我正在开发一个应用程序&#xff0c;我需要从客户端向服务器发送消息&#xff0c;并在客户端上的文件发生更改时通知服务器 . 我在Qt中使用QTcpServer和QTcpSocket类 . 我正在写socket并从服务器端的socket读取但是我的读取失败了 .我可以知道如何将消息发布到服务器 . 我需要在…

java 泛型详解

对java的泛型特性的了解仅限于表面的浅浅一层&#xff0c;直到在学习设计模式时发现有不了解的用法&#xff0c;才想起详细的记录一下。 本文参考java 泛型详解、Java中的泛型方法、 java泛型详解 1. 概述 泛型在java中有很重要的地位&#xff0c;在面向对象编程及各种设计模式…

mysql 截取字符串部分值,Mysql字符串截取_获取指定字符串中的数据

搜索热词前言&#xff1a;本人遇到一个需求&#xff0c;需要在MysqL的字段中截取一段字符串中的特定字符&#xff0c;类似于正则表达式的截取&#xff0c;苦于没有合适的方法&#xff0c;百度之后终于找到一个合适的方法&#xff1a;substring_index(www.sqlstudy.com.cn,.,-2)…

Intellij IDEA远程debug教程实战和要点总结

远程调试&#xff0c;特别是当你在本地开发的时候&#xff0c;你需要调试服务器上的程序时&#xff0c;远程调试就显得非常有用。 JAVA支持调试功能&#xff0c;本身提供了一个简单的调试工具JDB&#xff0c;支持设置断点及线程级的调试同时&#xff0c;不同的JVM通过接口的协…

php嗅探木马,PHP安全-密码嗅探

密码嗅探尽管攻击者通过嗅探(察看)你的用户和应用间的网络通信并不专门用于访问控制&#xff0c;但要意识到数据暴露变得越来越重要&#xff0c;特别是对于验证信息。使用SSL可以有效地防止HTTP请求和回应不被暴露。对任何使用https方案的资源的请求可以防止密码嗅探。最好的方…

Idea进行远程Debug

Idea远程调试 当把一个本地项目部署到远程服务器后有可能出现意想不到错误&#xff0c;这个时候通过远程调试能够更清楚的找到bug所在位置。本篇主要讲解如何使用Idea开发工具 进行调试1.远程调试服务器上面的SpringBoot 项目2.远程调试服务器上运行在tomcat中的项目&#xff…

如何用php查不同,php-MySql调查不同查询

大家好,我确实在MySql查询中苦苦挣扎,我有一个名为“ info”的表,并且其中有一个名为“ rating”的列,评分在1-10之间.现在,我需要生成一个百分比值,该百分比值表示1-6、7-8和9-10中有多少评级,但我需要它们拼命显示,之后我需要第二个查询,该查询可以从中减去结果的百分比值1-6…

如何使用websocket实现前后端通信

如何使用websocket实现前后端通信 websocket通信是很好玩的&#xff0c;也很有用的的通信方式&#xff0c;使用方式如下&#xff1a; 第一步由于springboot很好地集成了websocket&#xff0c;所以先在在pom.xml文件中引入依赖 <dependency><groupId>org.springfr…

matlab表示DFT和DTFT,【 MATLAB 】离散傅里叶级数(DFS)与DFT、DTFT及 z变换之间的关系...

上篇博文我们简单的讨论了离散傅里叶级数DFS和离散傅里叶变换DFT之间的关系&#xff0c;简单地说&#xff0c;DFT就是DFS在一个周期内的表现。为了后面讨论方便&#xff0c;这里给出DFS的系数公式(分析公式)&#xff1a;(1) 其中&#xff1a;综合公式&#xff1a;(2) 为了对比&…

tail查看nohup.out文件内容

1.前台实时查看nohub.out文件内容&#xff1a; tail -f nohup.out 2.根据关键字查看 tail -f nohup.out |grep "关键字"3.输出文件最后100行 tail -n 100 nohup.out 4.输出文件最后100行&#xff0c;含关键字 tail -n 100 nohup.out |grep "关键字"

Linux nohup实现后台运行程序及查看(nohup与)

Linux nohup实现后台运行程序及查看&#xff08;nohup与&&#xff09; 更新时间&#xff1a;2019年09月11日 09:28:40 作者&#xff1a;猿的生活 这篇文章主要介绍了Linux nohup实现后台运行程序及查看&#xff08;nohup与&&#xff09;&#xff0c;文中通过示例代码…

php面向对象异常处理,PHP面向对象编程——自定义PHP异常处理类

/*?* WEB开发笔记 www.chhua.com 每日练习 PHP面向对象编程——自定义PHP异常处理类?* 这所以用自定义的异常类&#xff0c;主要是区分异常来自程序的哪一部分&#xff0c;比如是来自MYSQL的还是来自MODEL的?* 一般情况下&#xff0c;自定义的异常类也不要太多&#xff0c;否…