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->a
分配给 $obj->b
,因此通过取消设置 $obj->a
,$obj->b
的值将为空.请问有什么想法吗?
【问题讨论】:
PHP 版本 5.3.4 执行代码后 $obj: object(stdClass)#1 (1) ["b"]=> int(10) 这不是参考。有关 PHP 句柄编写变量和引用的详细信息,请参阅 this answer... 【参考方案1】:你的代码运行正常,$obj->b
执行后是10
:http://codepad.org/QnXvueic
当您取消设置$obj->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 - 如何重命名对象属性?的主要内容,如果未能解决你的问题,请参考以下文章