PHP在保持其位置的同时重命名对象属性

时间:2014-07-01 15:54:40

标签: php oop object

如何在不更改订单的情况下重命名对象属性?

示例对象:

$obj = new stdClass();
$obj->k1 = 'k1';
$obj->k2 = 'k2';
$obj->k3 = 'k3';
$obj->k4 = 'k4';

通过创建新属性重命名示例:

$obj->replace = $obj->k3;
unset($obj->k3);

结果:

( k1=>k1, k2=>k2, k4=>k4, replace=>k3 )

看到问题?

只需重新创建对象属性即可更改订单。

我对数组有类似的问题,并提出了这个解决方案:

为阵列实施解决方案

function replaceKey(&$array, $find, $replace)
{
    if(array_key_exists($find, $array)){
        $keys = array_keys($array);     
        $i = 0;
        $index = false;
        foreach($array as $k => $v){
            if($find === $k){
                $index = $i;
                break;
            }
            $i++;
        }
        if ($index !== false) {
            $keys[$i] = $replace;
            $array = array_combine($keys, $array);
        }
    }        
}

寻找类似于此的东西,但是可以处理对象的函数。

似乎无法找到有关对象属性位置索引的任何文档。

2 个答案:

答案 0 :(得分:0)

由于您的数组有一个函数,为什么不执行以下操作:

$array = (array) $obj;
$replacedKeyArray = replaceKey($array);

$newObject = (object) $replacedKeyArray;

答案 1 :(得分:0)

所以,读取你的属性

$obj = new YourClass();
$backup = [];
foreach ($obj as $key => $value)
    {
    $backup[$key] = $value;
    unset($obj->$key);
    }
replaceKey($backup, $find, $replace);
foreach ($backup as $key => $value)
    {
    $obj->$key = $value;
    }