我能以更紧凑的方式重写多个变量赋值吗?

时间:2015-04-10 14:54:38

标签: php arrays list variable-assignment php-5.5

我有11行代码将类中的各种类成员变量保存到临时变量中,然后再将它们用于其他内容,如下所示:

// Save parts of myclass
$dutyp1 = $this->myclass->p1;
$dutyp2 = $this->myclass->p2;
...
$dutySg = $this->myclass->sg;

一些覆盖类变量的代码发生在上面的块之后,然后我将变量恢复到类中,如下所示:

// restore parts of myclass
$this->myclass->p1 = $dutyp1;
$this->myclass->p2 = $dutyp2;
...
$this->myclass->sg = $dutySg;

我应该注意到类中还有其他变量,但只有上面的特定变量才是我想要保存/恢复的。

问题 - 是否有更紧凑的方法来执行此操作,而不是使用多个变量(如$dutyp1$dutyp2等),或者是我有很多方法可以做到吗?我不是在寻找疯狂的压缩/编码,而是一种更紧凑的方式来做同样的事情而不必总共22行来保存/恢复。

2 个答案:

答案 0 :(得分:2)

1:将属性提取到(前缀)变量

extract()函数允许您将所有属性提取到变量。

// Without prefix
extract((array) $this->myclass);
// $p1, $p2, etc

// With prefix
extract((array) $this->myclass, EXTR_PREFIX_ALL, 'duty');
// $dutyp1, $dutyp2, etc

要恢复变量,您可以使用相反的compact()。不幸的是,它无法处理您使用的前缀。


2:通过引用传递的对象

如果通过引用(&)传递对象,则实际上将对原始对象应用修改。

$tmp = &$this->myclass;
$tmp->p1 = 123;

$this->myclass->p1; // 123

这样,您的对象始终是最新的,您无需还原。

答案 1 :(得分:0)

想出了这个:

//class member names
$keys = array('p1', 'p2', 'sg');

//save
$save = array();
foreach ($keys as $key) $save[$key] = $this->spec->{$key};

//restore
foreach ($keys as $key) $this->spec->{$key} = $save[$key];