在 PHP 5 中如何通过引用传递对象?

2024-02-15

在 PHP 5 中,您是否需要使用&修饰符通过引用传递?例如,

class People() { }
$p = new People();
function one($a) { $a = null; }
function two(&$a) { $a = null; )

在 PHP4 中你需要&修改器来在更改后维护引用,但我对我读过的有关 PHP5 自动使用引用传递的主题感到困惑,除非显式克隆对象。

在 PHP5 中,是 & 所有类型的对象(变量、类、数组……)都需要通过引用传递修饰符吗?


您是否需要使用 & 修饰符来传递引用?

从技术/语义上来说,答案是yes,即使有物体。这是因为有两种方法可以传递/分配对象:通过引用或通过标识符。当函数声明包含&, as in:

function func(&$obj) {}

无论如何,参数都将通过引用传递。如果您声明时没有&

function func($obj) {}

除了对象和资源之外,所有内容都将按值传递,然后通过标识符。什么是标识符?嗯,你可以把它看作是对参考的参考。举个例子:

class A
{
    public $v = 1;
}

function change($obj)
{
    $obj->v = 2;
}

function makezero($obj)
{
    $obj = 0;
}

$a = new A();

change($a);

var_dump($a); 

/* 
output:

object(A)#1 (1) {
  ["v"]=>
  int(2)
}

*/

makezero($a);

var_dump($a);

/* 
output (same as before):

object(A)#1 (1) {
  ["v"]=>
  int(2)
}

*/

那么为什么不呢$a传递给之后突然变成一个整数makezero?这是因为我们只覆盖了标识符。如果我们路过参考:

function makezero(&$obj)
{
    $obj = 0;
}

makezero($a);

var_dump($a);

/* 
output:

int(0) 

*/

Now $a是一个整数。所以,通过通过之间存在差异标识符并经过参考.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PHP 5 中如何通过引用传递对象? 的相关文章

随机推荐

  • 将 Jquery 手风琴扩展到表的行

    我有一张带有可折叠行的桌子 请检查here http jsfiddle net soumyazyx 8Xyjy 10 我只想使用 Jquery UI 手风琴 如图所示here http jqueryui com accordion 我正在尝
  • 在 ui-sref 中动态更改状态和参数

    使用 ui router 我想在 ng repeat 内动态设置 ui sref 指令 如下所示 a a Where steps是一个 状态对象 数组 每个对象都有自己的状态和参数对象 var steps state foo param i
  • 使用jquery设置输入html字符串的值

    我在字符串中有 HTML 片段 如下所示 var htmlString
  • NSSpeechSynthesizer 更改语言

    我正在编写一个基于 Cocoa Book 示例的简单程序 该程序使用 NSSpeechSynthesizer 来说出短语 我想知道如何更改用于合成阶段的语言 import PHAppDelegate h implementation PHA
  • 缺少 pdb 文件

    我正在 wince7 设备上调试我的应用程序 几分钟后 我收到一个错误 没有为任何调用堆栈帧加载任何符号 无法显示源代码 我注意到模块列表中有 1 个 dll 缺少 pdb 文件 它的名称是 System Drawing dll 我注意到在
  • 中止读取文件时 PHP 页面超时

    我有一个简单的 php 视图 如下所示 header Content Type image png readfile this gt image exit 在这个例子中 this gt image例如 data pictures thumb
  • 获取 Quicktime 视频信息

    有没有办法获取 QuickTime 视频信息 在谷歌搜索中 我发现 QT 的一个 cl 选项已损坏 我正在寻找 pasp 长度 音频通道 音频分配 拍手以及经常使用程序 Dumpster 找到的各种其他属性 使用 ffmpeg 无法获得大部
  • 如何使用 Webpack 创建与容器应用程序共享库的微前端捆绑包?

    我有一个任务 拥有具有单 Spa 框架的微前端 门户 主应用程序 通过 url 加载所有其他 js 代码 微前端 1 基于 React 微前端 2 基于 React 所以我的问题只有一个 我不想重复供应商库 如react react dom
  • 存储下拉值,什么是好方法

    想象一下 您有一个网站 其中有多个下拉菜单 这些下拉菜单是从后端数据库填充的 目标是将这些值存储在数据库中 并在渲染表单时检索它们 我见过使用两种方法 1 每种列表类型一张表 profession type id value hobby t
  • ASP.NET MVC 从 C# 代码创建绝对 url

    如何从 C 代码生成绝对 url 我想生成一个像这样的网址 localhost controller action id 有没有办法在 C 中做到这一点 就像在视图中完成它一样 它不会在控制器内部生成 而是在 ViewModel 内部生成
  • $.getJSON 获取 JSONP 数据

    我通过以下方式使用 getJSON 来接收警报 但没有运气 这是代码 并且ticker js文件只有以下行 ticket IBM price 14 57 它应该收到警报 14 57 但我没有收到警报 如果您想查看它的实际效果 可以尝试该链接
  • java.awt.Robot 的本机源代码

    我正在尝试找到 Java Robot 函数的本机实现 我找到了Windows的实现here http cr openjdk java net ohair openjdk7 jdk7 build copyright webrev jdk sr
  • “MongoDB Compass”无法打开,因为苹果无法检查它是否有恶意软件

    当我尝试在 macOS Catalina 上安装 MongoDB Compass 时 出现以下情况 MongoDB Compass can t be opened because Apple cannot check it for mali
  • 可以处理 HTTPS 的 WebBrowser 控件

    我正在寻找 NET 中可以处理 HTTPS 的 WebBrowser 控件的替代品 这个问题 https stackoverflow com questions 790542 replacing net webbrowser control
  • 使用 dash python 更改 bootstrap nav-pills 样式

    Dash 允许使用我们自己的 CSS 样式表 但是 如果您在科学领域并且不熟悉 CSS 则可以使用 Bootstrap 组件 这使得样式和页面布局非常容易组合在一起 这是在 dash 中创建侧边栏的标准示例 This app creates
  • Android 6.0 Marshmallow 停止显示垂直 SeekBar 拇指

    我一直在使用这个基本的包装器 https stackoverflow com a 28397530 250340在 SeekBar 周围 但发现它隐藏了拇指 或者做了一些时髦的事情 比如在棉花糖下的白色背景上将其变成白色 我使用 AS Bl
  • 企业报告解决方案[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • ListView Flutter 的单选

    我正在尝试实施一个listView在我的应用程序中进行单选 这样一旦点击列表中的项目 按下的项目颜色状态就会与其他项目不同 我已经做了我所知道的一切 但效果并不好 问题是 即使我的实现在按下时更新每个项目的状态 它也不会将其他项目重置为其初
  • 无法将 Web.Http.Results.JsonResult 隐式转换为 Web.Mvc.JsonResult

    我已经在控制器上设置了这个测试方法 以消除任何复杂性 根据我通过搜索找到的所有结果 这应该可行 我不确定我在这里缺少什么 public JsonResult test return Json new id 1 这是我得到的错误 无法将类型
  • 在 PHP 5 中如何通过引用传递对象?

    在 PHP 5 中 您是否需要使用 修饰符通过引用传递 例如 class People p new People function one a a null function two a a null 在 PHP4 中你需要 修改器来在更改