php实现对象传值方式的具体案例

发布时间:2020-07-09 11:01:54

来源:亿速云

阅读:85

作者:Leah

今天就跟大家聊聊有关php实现对象传值方式的具体案例,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

变量赋值与对象赋值对比<?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

?>

案例解释:

在这里通过变量的赋值方式 与 对象的赋值方式方式相对比,代码第5行中的赋值方式为“拷贝赋值”,故在修改其源值($a的值)的情况下,$b的值不受影响。$a与$b的内存关系图如下:

而代码20行将数据类型赋值给$p变量,通过$p修改对象内部的值成功,对比变量的传值方式,证明这是引用传值,内存关系图如下:

而代码20行将数据类型赋值给$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;

}

?>

第12行代码为本篇文章的最“点睛”的代码,等号右边为是一个对象,左边是一个变量,那么犀利的问题来了,$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;

?>

看完上述内容,你们对php实现对象传值方式的具体案例有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。

php中对象传值方式,php实现对象传值方式的具体案例相关推荐

  1. 经典 Python参数传递采用的肯定是“传对象引用”的方式。相当于传值和传引用的一种综合。如果函数收到的是一个可变对象(比如字典或者列表)的引用,就能修改对象的原始值--相当于通过“传引用”来传递对象

    python不允许程序员选择采用传值还是传引用.Python参数传递采用的肯定是"传对象引用"的方式.这种方式相当于传值和传引用的一种综合.如果函数收到的是一个可变对象(比如字典或 ...

  2. WPF中实现PropertyGrid(用于展示对象的详细信息)的三种方式

    WPF中实现PropertyGrid(用于展示对象的详细信息)的三种方式 原文:WPF中实现PropertyGrid(用于展示对象的详细信息)的三种方式 由于WPF中没有提供PropertyGrid控 ...

  3. C++中栈和堆上建立对象的区别

    在C++中类的对象建立分为两种,一种是静态建立,如A a:另一种是动态建立,如A* p=new A(),A*p=(A*)malloc():静态建立一个类对象,是由编译器为对象在栈空间中分配内存,通过直 ...

  4. Winform中实现序列化指定类型的对象到指定的Xml文件和从指定的Xml文件中反序列化指定类型的对象

    场景 在Winform程序中需要将某些页面的设置存储到配置文件中,下次再次打开时通过配置文件读取,点击确定时能将将设置保存到配置文件中. 之前介绍过 Winform中自定义xml配置文件后对节点进行读 ...

  5. Python中的可变与不可变对象

    Python中的可变与不可变对象 首先要明确一点,在Python中 ,一切赋值或者函数传值的方式都是靠引用.这与C++不同,C++有传值.传引用和传指针.因为Python不能显式的定义数据类型,而且没 ...

  6. modelmap前端怎么取值_【ModelMap】jsp中显示springmvc modelmap传递的对象

    最近在做一个小网站,功能非常基础,决定用springmvc搭建. 遇到一个问题,在controller向前端传值时,比如使用ModelMap传了一个字符串,modelmap.addattribute( ...

  7. 使用Blender中的几何节点创建程序对象

    大小解压后:2.4G 持续时间3h 30m 1280X720 MP4 语言:英语+中英文字幕(根据原英文字幕机译更准确) 使用Blender中的几何节点按程序创建对象 信息: 使用Blender中的几 ...

  8. TensorFlow中的对象检测教程:实时对象检测

    导言 创建能够在单个图像中识别和定位多个对象的精确机器学习模型仍然是计算机视觉中的核心挑战.但随着最近深度学习的进步,对象检测应用程序比以往更容易开发.TensorFlow的对象检测API是一个构建与 ...

  9. JSP中的九个内置对象

    2019独角兽企业重金招聘Python工程师标准>>> 一.JSP运行原理 每个JSP 页面在第一次被访问时,WEB容器都会把请求交给JSP引擎(即一个Java程序)去处理.JSP引 ...

  10. c++ 哈希_详解Python中的可哈希对象与不可哈希对象(二)

    点击上方"机器学习与python集中营",星标公众号重磅干货,第一时间送达☞机器学习.深度学习.python全栈开发干货作者:草yang年华来源:个人原创 前言:我们经常会听见很多 ...

最新文章

  1. 记一次数据库崩溃的恢复
  2. UI控件库分享:DWZ(j-UI)、LigerUI、Linb
  3. Fragment崩溃后重启
  4. redis--Sentinel
  5. 计算机组成原理-数制与编码
  6. Spark调优 数据本地化调优
  7. 管家婆7.2集合最新打印管理器_链接海内外企业用户丨管家婆分销ERP繁体版/英文版...
  8. C++ vector 容器
  9. HDU2602 Bone Collector【0/1背包+DP】
  10. 基于Vue+nodejs+Web的网上书城系统
  11. pantum打印机驱动安装m6506_奔图m6506驱动程序
  12. MAX30102学习笔记(下)
  13. IPD——从战略到执行的全面研发管理体系
  14. 游戏策划是怎样炼成的——17173七月流火专访天下贰主策划叶航(转)
  15. 身份认证协议攻击:黑客不希望你了解的事情
  16. Android 获取手机存储总大小,系统占用空间
  17. 什么是JAVA?JAVA能用来干什么?
  18. devexpress html编辑器,图解DevExpress RichEditControl富文本的使用,附源码及官方API
  19. 微软WHQL认证的好处
  20. RepVGG:极简架构,SOTA性能,让VGG式模型再次伟大

热门文章

  1. 计算机与打印机整体方案,打印机的一些使用方案
  2. [洪流学堂]Unity2017.3新功能:程序集定义(Assembly Definition File)功能详解
  3. mysql 左右值算法详解_无限分类左右值算法的常规操作逻辑
  4. OpenShift 4 之Service Mesh教程(6)- 根据Header路由请求
  5. OpenShift 4 之使用持久化存储
  6. AutoWrapper:通过有意义的响应来美化您的ASP.NET Core API
  7. 可控硅失效现象_闩锁现象及其防护
  8. 云端调用android函数,【探坑】Bmob的云端逻辑
  9. matlab流量结构分析,科学网-分享求解“结构分解分析(SDA)”各项均值的MATLAB程序-计军平的博文...
  10. mysql数据库回滚日志_MySQL中是如何实现事务提交和回滚的?