PHP - 如何重命名对象属性?

Posted

技术标签:

【中文标题】PHP - 如何重命名对象属性?【英文标题】:PHP - How to rename an object property? 【发布时间】:2011-11-10 17:37:53 【问题描述】:

我想知道如何在 php 中重命名对象属性,例如:

<?php
    $obj = new stdclass();
    $obj->a = 10;  // will be renamed
    $obj->b = $obj->a; // rename "a" to "b", somehow!
    unset($obj->a); // remove the original one

它在 PHP5.3 中不起作用,(不知道早期版本)因为将引用 $obj-&gt;a 分配给 $obj-&gt;b,因此通过取消设置 $obj-&gt;a$obj-&gt;b 的值将为空.请问有什么想法吗?

【问题讨论】:

PHP 版本 5.3.4 执行代码后 $obj: object(stdClass)#1 (1) ["b"]=> int(10) 这不是参考。有关 PHP 句柄编写变量和引用的详细信息,请参阅 this answer... 【参考方案1】:

你的代码运行正常,$obj-&gt;b 执行后是10:http://codepad.org/QnXvueic

当您取消设置$obj-&gt;a 时,您只是删除该属性,您不会触及该值。如果该值被其他变量使用,则在 order 变量中保持不变。

【讨论】:

这很方便。它省去了像其他语言一样进行反射和其他花哨的事情。【参考方案2】:
<?php     
$obj = new stdclass();
$obj->a = 10;  // will be renamed
$obj->b = $obj->a; // rename "a" to "b", somehow!
unset($obj->a); // remove the original one
var_dump($obj->b); //10 Works fine

【讨论】:

这不是重命名,是复制。它将占用->a的两倍内存。仅仅说“重命名”对于处理大型数据集的开发人员来说往往只是重要的事情。【参考方案3】:

使用对象克隆,参考:PHP __clone() documentation

【讨论】:

以上是关于PHP - 如何重命名对象属性?的主要内容,如果未能解决你的问题,请参考以下文章

在 normalizr 中重命名结果属性

php 如何下载远程文件到本地重命名

在 TypeScript 中使用解构/扩展复制具有重命名属性的对象

在 JavaScript 中重命名 File() 对象

在 node.js 中重命名 json 对象名称

php检查文件名是不是存在,重命名文件