【问题标题】:PHP - How to rename an object property?PHP - 如何重命名对象属性?
【发布时间】: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...

标签: php oop properties


【解决方案1】:

你的代码运行正常,$obj-&gt;b 执行后是10http://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

【讨论】:

    猜你喜欢
    • 2014-04-15
    • 2021-03-19
    • 1970-01-01
    • 2020-04-19
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 2011-03-31
    相关资源
    最近更新 更多