php的对象传值与引用传值代码实例讲解
作者:PHP开发社区 发布时间:2023-11-06 08:42:37
变量赋值与对象赋值对比
<?php
// 声明一个变量并赋值
$a = 1;
// 将数据类型的值 赋值 给一个变量
$b = $a;
// 修改$a的值
$a = 2;
// $a和$b是两个独立的内存空间修改其中一个另一个不受影响
echo $b; // 1
class Person{
public $name;
public $age;
}
// 将对象类型的数据 赋值 给一个变量
$p = new Person;
// 通过对属性修改值,来确定面向对象中 对象的传值方式
$p->name = 'jesse';
// 若是成功修改值,则是引用传值
echo $p->name; // jesse
?>
案例解释:
在这里通过变量的赋值方式与对象的赋值方式方式相对比,代码中 $b = a ; 的 赋 值 方 式 为 “ 拷 贝 赋 值 ” , 故 在 修 改 其 源 值 ( a; 的赋值方式为“拷贝赋值”,故在修改其源值( a;的赋值方式为“拷贝赋值”,故在修改其源值(a的值)的情况下, b 的 值 不 受 影 响 。 b的值不受影响。 b的值不受影响。a与$b的内存关系图如下:
而代码 p − > n a m e = ′ j e s s e ′ ; 将 数 据 类 型 赋 值 给 p->name = 'jesse';将数据类型赋值给 p−>name=′jesse′;将数据类型赋值给p变量,通过$p修改对象内部的值成功,对比变量的传值方式,证明这是引用传值,内存关系图如下:
<?php
class Person
{
public $name;
public $age;
// 将对象类型的数据 赋值 给一个变量
$p = new Person;
// 通过对属性修改值,来确定面向对象中 对象的传值方式
$p->name = 'jesse';
// 将对象赋予另一变量
$m = $p;
// 另一变量修改属性值
$m->name = 'Marry';
// 输出源变量 赋值变量访问内部属性的结果
echo $p->name, $m->name;
}
?>
$m = p ; 代 码 为 本 篇 文 章 的 最 “ 点 睛 ” 的 代 码 , 等 号 右 边 为 是 一 个 对 象 , 左 边 是 一 个 变 量 , 那 么 犀 利 的 问 题 来 了 , p;代码为本篇文章的最“点睛”的代码,等号右边为是一个对象,左边是一个变量,那么犀利的问题来了, p;代码为本篇文章的最“点睛”的代码,等号右边为是一个对象,左边是一个变量,那么犀利的问题来了,m是将对象拷贝一份?还是按引用传递呢?该代码内存关系如下:
所以,最后两个对象的属性值均被修改为Marry!!!
那按引用传值会是怎么个情况?
<?php
class Person
{
public $name;
public $age;
}
// 将对象类型的数据 赋值 给一个变量
$p = new Person;
// 通过对属性修改值,来确定面向对象中 对象的传值方式
$p->name = 'jesse';
// 将对象赋予另一变量
$m = &$p;
// 另一变量修改属性值
$m->name = 'Marry';
// 输出源变量 赋值变量访问内部属性的结果
echo $p->name, $m->name;
?>
来源:https://blog.csdn.net/liuxingjiaoyuC/article/details/113504288
猜你喜欢
- 以下的文章主要向大家介绍的是实现MySQL远程访问的实际操作流程,以及在实现MySQL远程访问的过程中哪些的相关事项是十分重要的,以下就是文
- 1983年1月19日,苹果公司发布乔布斯领导研制的新一代电脑Lisa,当时Lisa电脑的设计人员就认为,必须将立即执行的命令和需要用户附加输
- 代码如下:Dim strName, iLoop For Each strName 
- 什么是数据库镜像?Robidoux:数据库镜像是将数据库事务处理从一个SQL Server数据库移动到不同SQL Server环境中的另一个
- 方法一:同步操作1.pipelines.py文件(处理数据的python文件)import pymysqlclass LvyouPipeli
- 本文实例讲述了Python多线程原理与用法。分享给大家供大家参考,具体如下:先来看个栗子:下面来看一下I/O秘籍型的线程,举个栗子——爬虫,
- python类class定义及其初始化定义类,功能,属性一般类名首字母大写class Calculator:#名字和价格是属性
- 在这篇文章中,我将努力揭开Mobile Web开发的神秘面纱,换句话说,也就是为了移动设备上的用户体验可以被接受,代码得怎么设计。我将阐述“
- 手痒痒系列之简单的放大镜写了个放大镜功能,可以设置显示的宽高width,height显示的位置,float ‘left’ 'righ
- 总的来说,提高应用程序性能的最好的方法是发现应用的瓶径之所在,和数据库进行交互的性能无疑是决定应用程序性能的重要环节之一。因为ADO是当前最
- 如何做一个全面的探测器? 我们也可以做一个功能类似的探测器,见下:<Script lan
- 2007年1月,国务院 * 了中央“一号文件”,文件中对加快农业信息化建设有了更明确的部署,为新农村建
- XML和XSLT的转换使Web设计受益无穷。借助XML和 XSLT转换,你可以实现将动态用语(dynamic verbiage)和网站内容存
- 英文原文:The seven rules of Unobtrusive JavaScript原文地址:http://icant.co.uk/
- 另:@会影响效率如:@mysql_connect() 可以导出错误,但会影响效率。mysql与mysqli的区别:
- 当我们建立一个数据库时,并且想将分散在各处的不同类型的数据库分类汇总在这个新建的数据库中时,尤其是在进行数据检验、净化和转换时,将会面临很大
- ASP实现防止网站被采集代码如下:<% Dim AppealNum,AppealCount Appeal
- 近日,有朋友一直打听flash连结服务器相关的知识,搞得我忧心重重,重点是自己也忘记了,大部分Flash的相关开发都是两年前的事,而且fla
- 在使用Ajax过程中,有时候总会遇到一些难题,浏览器兼容、编码、IE下的特殊处理等等,偶尔会搞的人头昏脑胀哭笑不得,这里列一些小贴士,或许有
- <?php /** * Created by JetBrains Ph