PHP 对象分配与克隆

2023-11-23

我知道 php 文档中对此进行了介绍,但我对这个问题感到困惑。

来自 php 文档:

$instance = new SimpleClass();
$assigned   =  $instance;
$reference  =& $instance;
$instance->var = '$assigned will have this value';
$instance = null; // $instance and $reference become null
var_dump($instance);
var_dump($reference);
var_dump($assigned);
?>

上面的例子将输出:

NULL
NULL
object(SimpleClass)#1 (1) {
["var"]=>
 string(30) "$assigned will have this value"
}

好的,我明白了$assigned survived原始对象($instance) 被分配给null,所以显然$assigned不是引用,而是 $instance 的副本。

那么有什么区别

 $assigned = $instance 

and

 $assigned = clone $instance

对象是内存中的抽象数据。一个变量总是保存一个参考到内存中的这个数据。想象一下$foo = new Bar创建一个对象实例Bar在内存中的某个地方,为其分配一些 id#42, and $foo现在持有这个#42作为对此对象的引用。将此引用分配给其他变量引用或 通常与任何其他值的工作方式相同。许多变量可以保存此引用的副本,但都指向同一个对象。

clone显式创建对象本身的副本,而不仅仅是指向该对象的引用的副本。

$foo = new Bar;   // $foo holds a reference to an instance of Bar
$bar = $foo;      // $bar holds a copy of the reference to the instance of Bar
$baz =& $foo;     // $baz references the same reference to the instance of Bar as $foo

只是不要混淆“参考”,如=&与“参考”如对象标识符.

$blarg = clone $foo;  // the instance of Bar that $foo referenced was copied
                      // into a new instance of Bar and $blarg now holds a reference
                      // to that new instance
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 对象分配与克隆 的相关文章

  • Laravel Redis 配置

    我目前正在使用 Laravel 和 Redis 创建一个应用程序 几乎一切都工作正常 我按照文档中的说明扩展了身份验证 用户可以订阅 登录 注销 我可以创建内容 所有内容都存储在 Redis 中 但我有一个问题 我无法运行 php arti
  • PHP 7.2 计数错误

    警告 count 参数必须是数组或对象 实现 Countable in 我在以下行中收到上述错误 if 0 gt count this gt xprop 有人可以帮助我理解这一点吗 我对 PHP 还很陌生 问题显然是 this gt xpr
  • PHP7.1上读取会话数据失败

    分享一个我遇到的问题 现已解决 在我的开发机器上 我使用 PHP 运行 IIS 我升级到 PHP7 突然我的代码不再工作 返回此错误 session start 读取会话数据失败 用户 路径 C WINDOWS temp 看起来像是权限问题
  • snappy wkhtmltopdf 包装器将生成的 html 文件发送到浏览器

    我像鼹鼠一样用谷歌搜索 但找不到正确的方法 我正在使用 WKHTMLTOPDF Wrapper Snappy 创建 PDF 如何将使用generateFromHtml方法生成的pdf直接发送到浏览器 这就是我想做的 header Conte
  • CodeIgniter加入选择为

    我的数据库中有 2 个表需要加入 一张表是 artikelen 表 另一张表是 Collections 表 我目前有 this gt db gt select this gt db gt from collecties this gt db
  • RuntimeException - 会话存储未根据请求设置 - Laravel Socialite - Facebook

    我在用着Laravel 5 7 and Laravel Socialite 3 1 我想使用登录Facebook我刚刚为此项目配置了应用程序 这些是我为此配置的主要文件 env FACEBOOK CLIENT ID FACEBOOK CLI
  • 通过 PDO 将双精度数插入 MySQL 时精度损失

    我遇到了这种非常烦人的行为 我想知道我是否做错了什么 或者这是否是故意的 如果是的话 为什么 每当我在 php 5 3 中有一个 double 类型的变量 并且想将其插入到数据库 MYSQL 5 0 的 double 类型字段中时 该值总是
  • 如何处理PDO异常[重复]

    这个问题在这里已经有答案了 我正在尝试与PDOphp 上的类 但我在找到处理错误的正确方法时遇到了一些麻烦 我编写了以下代码
  • Laravel 5.7:维护模式的自定义刀片模板,但不是 503.blade.php

    每次php artisan down开启后 Laravel 显示 503 页面 好的 我可以通过创建名为的新文件来自定义它503 blade php inside resources views errors 关键是 我在任何时候都不认为维
  • 多维数组中的数组排列保留键 PHP

    这两天我一直在疯狂地尝试完成这个任务 也许你可以启发我 这是针对赛马投注排列的 每次用户玩游戏时 我都会得到一个多维数组 2 个级别 第一级包含比赛 ID 第二级包含用户为该比赛选择的马匹 它看起来像这样 play array 4 gt a
  • Chart.js - 使用 mysql 和 php 从数据库获取数据

    我正在尝试将静态数据转换为使用数据库结果 我将使用MySQL and PHP 示例代码 var randomScalingFactor function return Math round Math random 100 var lineC
  • WordPress 子主题覆盖父主题包括

    我正在创建 WordPress 子主题 需要覆盖某些小部件模板 我正在尝试使用此方法来覆盖父主题调用 覆盖主题功能的正确方法 http www venutip com content right way override theme fun
  • POSTed 数组保留其值

    今天 我注意到我的一个 WordPress 安装的行为方式非常奇怪 每当我从仪表板更新帖子时 它的一些额外输入都会保留它们已有的值 所有这些都是多维数组 例如 post php post 123 action 编辑
  • 一次用 \r\n & \n & \r 分解字符串? [复制]

    这个问题在这里已经有答案了 我想按行分割字符串 但我希望它基于所有主要使用的换行符 n r n r 并返回一个包含每一行的数组 您可以使用正则表达式和preg split http php net preg split反而 lines pr
  • Yii2 组件将数据传递给 __construct

    我有一个库 我想将其用作组件 在配置文件中我这样设置 components gt superLib gt class gt SuperLib construct gt first second Maybe Yii 2 have proper
  • 如何使用 PHP 将字符串按大写字母分解?

    我有一个字符串 CamelCaseString 我想对大写字母进行explode split 或一些更好的方法来将该字符串分解为单个单词 最简单的方法是什么 解决方案更新 此链接指向一个略有不同的问题 但我认为答案通常比本页当前问题的答案更
  • Laravel 4.2 Composer 安装错误:“无法扫描类”

    我想通过 Composer 在新的 Laravel 4 2 安装上安装一些软件包 但是 我遇到了例外 这是我的作曲家文件 name laravel laravel description The Laravel Framework keyw
  • Symfony VS CakePHP:哪一个最接近 PHP [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我主要是一名 Rails 开发人员 但有时 我必须使用 PHP 进行编码 因为 stackoverflow com更喜欢可以回答的问题 我想知道
  • 无法访问 WordPress 中声明的全局变量

    我有以下代码 g value something print g value function get value global g value print g value print get value 当我在独立的 PHP 脚本中运行它
  • 通过 IP 地址限制 Laravel 错误日志

    When debug被设定为true在 Laravel 的app config php有什么方法可以限制结果Whoops包含对某些 IP 地址的堆栈跟踪的错误页面 并且不在该列表中的 IP 显示特定视图 Thanks 没有内置 但是你可能可

随机推荐

  • 嵌套期货未执行

    我遇到了一个奇怪的情况 我正在摆弄CompletableFuture当运行以下代码时 我得到了意想不到的结果 public static void main String args CompletableFuture
  • 计算链表中可能循环的节点数

    问题是这样的 它来自 Sedgwick 的优秀 Java 算法 q 3 54 给定一个指向不包含空链接的单链表中节点的链接 即每个节点要么链接到其自身 要么链接到列表中的另一个节点 确定不同节点的数量 而无需修改任何节点 并且使用不超过常量
  • 使用 Plack 处理多个文件上传

    尝试使用 Plack 处理多个文件上传 My form
  • subprocess.popen 和 subprocess.run 有什么区别

    我是新来的subprocess模块和文档让我想知道两者之间有什么区别subprocess popen and subprocess run 该命令的作用有区别吗 是不是只有比较新的一个 使用哪个更好 subprocess run 在Pyth
  • 在 macOS arm64 架构上使用 x86 库和 OpenMP

    我有一台 MacBook M1 并在我的机器上安装了一个针对 x86 Intel 架构编译的库 我有一些使用 OpenMP 的源代码 我想使用 clang 编译器编译我的代码并将我的可执行文件链接到 x86 库 我可以按照说明编译没有 x8
  • Tensorflow:如何创建 Pascal VOC 风格图像

    我正在致力于在 Tensorflow 中实现语义分割网络 并且我正在尝试弄清楚如何在训练期间写出标签的摘要图像 我想以类似的风格对图像进行编码类分割注释用于 Pascal VOC 数据集 例如 假设我有一个网络 其训练批次大小为 1 有 4
  • 如何查找3个或更多连续字符?

    我正在检查密码 这些功能之一是检查输入的密码是否连续重复 我还没有代码 因为我不知道该怎么做 我找到了这个正则表达式匹配两个或多个非连续的相同字符但它只匹配重复的逗号 以下是场景 5236aaa121 重复模式 因为a连续重复3次 2312
  • 在 PHP 中使用 uasort 访问数组键

    如果有一个相当基本的uasortPHP 中的函数如下所示 uasort arr function a b if a gt b return 1 if a lt b return 1 我尝试排序的数组如下所示 1642 gt 1 9314 g
  • 如何在简单适配器中的 imageview 中显示图像?

    我正在从 JSON 数组获取数据 并且可以在文本视图中显示文本 但在显示图像时遇到问题 这是主要活动 public class test extends ListActivity url to make request private st
  • 在 Azure 逻辑应用程序中反序列化 ServiceBus 内容

    我正在尝试读取 Azure 逻辑应用程序中消息的内容正文 但没有取得太大成功 我看到很多建议都说主体是base64编码的 并建议使用以下内容进行解码 json base64ToString triggerBody ContentData T
  • 使用snakeyaml将.yml文件加载到哈希图中(导入junit库)

    我正在尝试将 opencv 的 yml 文件加载到 arrayLists 均值 投影和标签中 我已经创建了这三个数组列表 并尝试将 yml 文件中的元素解析为它们 我发现了SnakeYAML 文档 但是我没有找到正确的方法 我正在尝试使用
  • 将 T[] 转换为 T[][] 的最快方法?

    So 事实证明并非所有数组都是一样的 多维数组可以具有非零下界 例如 请参阅 Excel PIA 的 Range Value 属性object rectData myRange Value 我需要将这些数据转换为锯齿状数组 我在下面的第一次
  • 为什么增强的 GCC 6 优化器会破坏实际的 C++ 代码?

    GCC 6 有一个新的优化器功能 假设this始终不为空并基于此进行优化 值范围传播现在假设 C 成员函数的 this 指针非空 这消除了常见的空指针检查但也破坏了一些不合格的代码库 例如 Qt 5 Chromium KDevelop 作为
  • OpenCV中如何检查两个矩阵是否相同

    我有两个 cv Mat 实例 m1 和 m2 它们具有相同的数字类型和大小 OpenCV 中是否有任何函数可以返回矩阵是否相同 具有所有相同的值 正如 Acme 提到的 您可以使用cv compare尽管它并不像您希望的那么干净 在下面的示
  • jQuery 多 ID 选择器

    这是我的代码开头的片段 var myUpload upload link upload bla bla bla 基本上我想做的是用几个不同的 ID 进行相同的调用 我本以为这会起作用 但事实并非如此 var myUpload upload
  • 将标签放在 SVG 路径的“中心”

    我正在尝试在 svg 文件的多边形上绘制标签 我面临的问题是大致找出这个多边形的中心来放置标签 因为路径的坐标是 svg 格式并且需要解析 有没有更简单的方法来确定 svg 多边形的中心 也许有人可以指出 javascript 库或片段 我
  • 如何在使用 tf.keras.preprocessing.image_dataset_from_directory() 时在预测期间获取文件名?

    Keras介绍tf keras preprocessing image dataset from directory最近的功能 比以前效率更高ImageDataGenerator flow from directory张量流2 x中的方法
  • 关闭 jQuery Mobile 新弹出窗口导致页面无用刷新

    我正在使用 1 2 0 alpha 版本的新 jqm 弹出窗口 我的问题是 当使用 esc 键关闭弹出窗口或单击屏幕时 我调用弹出窗口的页面会无用地刷新 此刷新仅发生我第一次关闭它 如果我重新打开并再次关闭弹出窗口 则页面不会刷新 似乎由于
  • Junit 5 中的 org.junit.runner.JUnitCore.runClasses 相当于什么?

    以下代码从 JUnit4 开始 大部分已翻译为 JUnit5 除了main 我这样写的原因是我正在演示 TDD 并且我有多个版本StringInverter实现 每个实现更多的功能并通过更多的测试 这里是StringInverter界面 i
  • PHP 对象分配与克隆

    我知道 php 文档中对此进行了介绍 但我对这个问题感到困惑 来自 php 文档 instance new SimpleClass assigned instance reference instance instance gt var a