PHP 克隆关键字 [重复]

2024-01-14

可能的重复:
PHP 中的对象克隆是什么? https://stackoverflow.com/questions/2144506/what-is-object-cloning-in-php

我正在研究一个经常使用“clone”关键字的现有框架,不确定这是否是一个好主意?我真的不明白使用“克隆”关键字的必要性。

例如看看这个编码

i.e

  public function getStartDate ()
  {
    return clone $this->startDate;
  }

对我来说这个函数应该像下面这样,我不认为克隆的需要。

  public function getStartDate ()
  {
    return $this->startDate;
  }

使用克隆的原因是 PHP 在处理对象时总是返回对象作为引用,而不是作为副本。

这就是为什么当将对象传递给函数时,您不需要使用 & (引用)指定它:

function doSomethingWithObject(MyObject $object) { // it is same as MyObject &object
   ...
}

因此,为了获得对象副本,您必须使用clone关键字 这是一个关于 php 如何处理对象以及克隆的作用的示例:

class Obj {
    public $obj;
    public function __construct() {
        $this->obj = new stdClass();
        $this->obj->prop = 1; // set a public property
    }
    function getObj(){
        return $this->obj; // it returns a reference
    }
}

$obj = new Obj();

$a = $obj->obj; // get as public property (it is reference)
$b = $obj->getObj(); // get as return of method (it is also a reference)
$b->prop = 7;
var_dump($a === $b); // (boolean) true
var_dump($a->prop, $b->prop, $obj->obj->prop); // int(7), int(7), int(7)
// changing $b->prop didn't actually change other two object, since both $a and $b are just references to $obj->obj

$c = clone $a;
$c->prop = -3;
var_dump($a === $c); // (boolean) false
var_dump($a->prop, $c->prop, $obj->obj->prop); // int(7), int(-3), int(7)
// since $c is completely new copy of object $obj->obj and not a reference to it, changing prop value in $c does not affect $a, $b nor $obj->obj!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 克隆关键字 [重复] 的相关文章

  • PHP 共享标头而不使用服务器端脚本?

    到目前为止我总是通过 PHP 解决简单的问题 您有一个包含页眉 菜单 页脚和内容字段的网站 每个页面的页眉 菜单和页脚通常是相同的 在没有 PHP 或任何其他服务器端语言的情况下 如何使页眉 菜单和页脚数据仅存在于一个文件中 例如 您不会有
  • 禁用 WooCommerce 手动/编辑订单的电子邮件通知

    需要 WooCommerce 专业知识 我需要禁用手动创建的订单的电子邮件通知 我必须使用处理状态 由于处理订单状态的自定义挂钩 我无法创建自定义状态 理想情况下 手动订单页面中可以勾选一个复选框 勾选后 它将禁止在每种状态下向客户发送电子
  • 如何将变量插入 PHP 数组?

    我在网上查了一些答案 但都不是很准确 我希望能够做到这一点 id result id info array id Example echo info 0 这有可能吗 您需要的是 不推荐 info array id Example varia
  • 我可以让 swagger-php 在查询字符串上使用数组吗?

    我使用 Swagger php 当我定义查询字符串上的参数时 它可以是一个数组 但据我所知 它不支持这种查询字符串 https api domain tld v1 objects q 1 q 5 q 12 我相信这会被设定in the co
  • 在 PHP 中包含 PHP 文件

    我有一个网站 它运行 PHP if 语句来根据附加文件的类型 即 Jpg Txt MP4 显示内容 所以我显示 TXT 文件的代码是 if post attachment txt display attachment div class d
  • PHP 无法打开流:是一个目录

    非常简单的 PHP 脚本 我在我亲自设置的 Ubuntu Web 服务器上的 EE 模板中运行 我知道这与权限有关 并且我已经将我尝试写入的目录的所有者更改为 Apache 用户 我得到的错误是 遇到 PHP 错误 严重性 警告 消息 fi
  • 如何检测字符串中的非 ASCII 字符?

    如果我有一个 PHP 字符串 如何以有效的方式确定它是否至少包含一个非 ASCII 字符 我所说的非 ASCII 字符是指不属于该表的任何字符 http www asciitable com http www asciitable com
  • 如何关闭未关闭的 HTML 标签?

    每当我们从数据库或类似来源获取一些经过编辑的用户输入内容时 我们可能会检索仅包含开始标记但不包含结束标记的部分 这可能会妨碍网站当前的布局 有客户端或服务器端的方法来解决这个问题吗 找到了一个很好的答案 使用 PHP 5 并使用 DOMDo
  • CodeIgniter 控制器 - JSON - AJAX

    我正在尝试通过 AJAX 使用 CodeIgniter 发送表单构建 并尝试使用 JSON 获取响应 但是 我只在打开开发人员选项卡时看到响应 我什至不确定这是否实际上是响应 因为它显示了两个 json 数据 它所显示的只是加载旋转器 然后
  • 在我的 index.php 中加载 CSS 和 JS 等资源时出现错误 403

    我使用的是 Linux Elementary OS 并在 opt 中安装了 lampp My CSS and JS won t load When I inspect my page through browser The console
  • 编辑 HTACCESS 文件以防止直接访问特定文件夹中的特定文件

    我试图阻止直接访问子文件夹中的特定文件 我意识到这个论坛上有很多描述类似问题的主题 但是 我的似乎有点尴尬 由于我已经存在 HTACCESS 文件 这是文件的文件路径 www example com PRINCIPAL PROJECTS m
  • 如何在HTML中的PHP中注释掉HTML和PHP?

    这是我想注释掉的一行代码 h1 class post title a href title a h1 一种流行的注释方法是分别注释 html 和 php 有一个更好的方法吗
  • 访问sendBeacon发送的数据

    文档表明sendBeacon通过发送其数据HTTP POST request 但在 PHP 中 POST变量似乎是一个空数组 这是我的 JavaScript 代码 navigator sendBeacon beacon log php My
  • 使用 Instagram Basic Display API 时出现“无效平台应用程序”错误

    我正在尝试使用 Instagram Basic 显示 API 但是当我发布授权代码以获取访问令牌时 我不断收到以下错误 error type OAuthException 代码 400 error message 平台应用无效 我正在遵循此
  • 使用 json_encode() 函数在 PHP 数组中生成 JSON 键值对

    我正在尝试以特定语法获取 JSON 输出 这是我的代码 ss array 1 jpg 2 jpg dates array eu gt 59 99 us gt 39 99 array1 array name gt game1 publishe
  • PHP 中的引用

    我正在编写一个自定义博客引擎 并且希望拥有类似于 Wordpress 的引用 我可以查看 WordPress 源代码 但我真的更喜欢某种教程 但到目前为止我还没有找到 有没有关于在 PHP5 中实现 trackbacks 或 pingbac
  • 如何将 Smarty 3 包含到 Laravel 4 中?

    我是 Laravel 的新手 所以仍在习惯这些概念 但是我有大约 10 年的使用 Smarty 的经验 所以我希望利用这一点 除了事实上 Blade 似乎缺乏太多我发现有用且在 Smarty 中开箱即用的功能 但无论如何除了这个问题的要点之
  • 如何从 Laravel 执行存储过程

    我需要在表单提交数据后执行存储过程 我让存储过程按照我想要的方式工作 并且我的表单正常工作 我只是不知道从 laravel 5 执行 sp 的语句 它应该是这样的 执行 my stored procedure 但我似乎在网上找不到类似的东西
  • phpActiveRecord 日期时间格式不正确

    当尝试使用 phpActiveRecord 在表中创建记录时 出现以下错误 Invalid datetime format 1292 Incorrect datetime value 2013 06 20 11 59 08 PDT for
  • 从字符串中获取数字

    我有一个字符串 例如 lorem 110 ipusm 我想获取 110 我已经尝试过这个 preg match all 0 9 string ret 但这正在返回 Array 0 gt 1 1 gt 1 2 gt 0 我想要这样的东西 Ar

随机推荐

  • 身份视图在哪里?

    当我在 NET Core 2 1中创建新项目时 我找不到 Identity Account Manage后面的视图 它在哪里 现在如何更改页面样式 这些视图现在是预编译库的一部分 Microsoft AspNetCore Identity
  • PHP SoapClient 类型映射的行为不同

    我有一个 Web 服务函数 它将一组项目返回给 PHP 客户端 根据项目的数量 PHP 返回类型有所不同 如果函数返回一项 则 PHP 类型为stdClass如果函数返回多个项目 则 PHP 类型为array 无论哪种情况都应该是array
  • 更改 ng-repeat 内的角度 ui-view

    我在单个控制器中使用多个命名的 ui 视图 当使用以下代码在 html 文件中命名 ui view 时 一切都按预期工作 div class box div div div div div div div div div div div 但
  • 将 CUDA 与 Visual Studio 2017 结合使用

    我正在尝试安装 CUDA 但收到一条消息 未找到支持的 Visual Studio 版本 我认为这是因为我使用的是 Visual Studio 2017 社区 而 CUDA 目前仅支持 Visual Studio 2015 不幸的是 微软不
  • 使用 Velocity 模板语言的类型化 React 函数组件模板

    我正在使用 Webstorm 作为我的 IDE 它允许我突出显示一些 JSX 并将组件提取为功能组件 支持此功能的代码位于我不熟悉的 VTL 中 当我提取这样的组件时
  • flutter中的new_version包返回RangeError(index):无效值:有效值范围为空:1

    我在 flutter 中使用 new vesrion 0 3 1 包来显示警报对话框 如果 flutter 应用程序商店中有新版本可用 则显示更新应用程序 但我收到以下书面异常 ERROR flutter lib ui ui dart st
  • 无法让 Tensorflow 在 macOS M1 Pro 芯片上运行

    我一直在尝试进入 ML 领域 并且想学习相关课程 但它需要 Tensorflow 而且我一直在尝试让它在我的系统上运行 我有 2021 款 14 16GB Macbook Pro 配备 M1 Pro 芯片 并且运行的是 Ventura 13
  • 检测到的 JDK 版本:1.6.0-24 不在允许范围 1.7 内

    当我运行命令时 mvn clean package 我收到错误 Detected JDK Version 1 6 0 24 is not in the allowed range 1 7 如何修复上述错误 我尝试检查安装的jdk版本并得到了
  • django模型管理添加表单卡住了

    考虑一下这个 admin register Personal site admin site class PersonalAdmin admin ModelAdmin form ChangePersonalForm add form Add
  • 正则表达式匹配额外的空组

    我是正则表达式领域的新手 我下面发布的所有内容都是我的代码中的简化示例 我有一根绳子 比方说test 1 some 2 foo bar 4 我想替换为title test 1 title some 2 title foo title bar
  • 如何在 MVC 4 中不指定表单区域

    我有一个 MVC 应用程序 其中配置了区域 注销链接出现在布局页面中 因此它会显示在每个页面上 当我单击注销时 它总是将其附加到它所在的区域中 我只想让它转到帐户 注销 无区域 我尝试了以下方法 但没有成功 有什么建议吗 using Htm
  • WPF richTextBox问题

    如果一行文本换行到另一行 如何以编程方式确定字符串中的断点 示例 输入字符串 这是对文本换行行的测试 Based on the width of the richTextBox it could display This is a test
  • 如何在 Blazor 中将 AuthorizeView 标记与自定义身份验证逻辑结合使用

    我在 Blazor 服务器应用程序中有一个自定义身份验证系统 具有自定义数据库和一些逻辑 我希望受益于 razor 中内置的 AuthorizeView 标签 但我不知道如何在没有 AspNetCore Identity 的情况下使用它 现
  • Openssl:在 SSL_CTX_load_verify_locations API 中使用 CApath 参数时证书验证失败

    我正在尝试与服务器计算机建立 TLS 连接 我已使用 openssl CLI 命令创建了根 CA 证书和服务器证书 我创建了服务器证书 其通用名称与其 IP 地址相同 根 CA 证书的通用名称是服务器的 FQDN 我正在使用 openssl
  • JAX-RS 2.0 WebSphere 8.5 没有独立的共享库

    我正在使用 Jersey 2 在 IBM WebSphere 8 5 环境中实现 JAR RS 2 0 读完这篇文章后Websphere 8 中的 JAX RS Jersey 2 10 支持 https stackoverflow com
  • ASP.NET MVC - MapRoute 与 paths.Add(和 404)

    我刚刚开始使用 ASP NET MVC MapRoute 和 paths Add 之间有什么区别 我应该只使用 MapRoute 吗 我可以绘制多条路线吗 哪些 地图 优先 您首先调用的还是最后调用的 我希望能够为用户做一些类似于 Stac
  • 在共享主机上使用 Laravel 发送邮件

    我正在尝试从我的网站发送邮件 我正在使用 laravel 5 5 和 hostnet nl 的共享托管 我非常确定我的所有配置都是正确的 我的 env MAIL DRIVER mail MAIL HOST smtp02 hostnet nl
  • 如何让我的安装程序应用程序在 Windows 上正常运行?

    我在 Delphi 中制作了一个简单的安装程序应用程序 没什么花哨的 基本上我将文件包含到 Exe 中 然后将它们解压到用户指定的路径 然而 我偶然发现了一个问题 我注意到这适用于任何 Windows 可执行文件 无论它是否是安装程序 如果
  • 对 Android 中的特定布局进行“屏幕截图”

    我有两个密切相关的主要问题 我是从程序化的角度来看待这些问题的 1 我希望截取特定布局的内容的屏幕截图 即ScrollView嵌套在一个LinearLayout 罢工 gt 2 作为ScrollView有溢出屏幕的内容 因此可以滚动 如何确
  • PHP 克隆关键字 [重复]

    这个问题在这里已经有答案了 可能的重复 PHP 中的对象克隆是什么 https stackoverflow com questions 2144506 what is object cloning in php 我正在研究一个经常使用 cl