如果我有以下注册表类:
Class registry
{
private $_vars;
public function __construct()
{
$this->_vars = array();
}
public function __set($key, $val)
{
$this->_vars[$key] = $val;
}
public function __get($key)
{
if (isset($this->_vars[$key]))
return $this->_vars[$key];
}
public function printAll()
{
print "<pre>".print_r($this->_vars,true)."</pre>";
}
}
$reg = new registry();
$reg->arr = array(1,2,3);
$reg->arr = array_merge($reg->arr,array(4));
$reg->printAll();
是否有更简单的方法将新项目推送到'arr'数组? 这段代码:'array [] = item'不能使用魔法设置方法,而且我找不到谷歌的任何有用信息。谢谢你的时间!
答案 0 :(得分:4)
如果你有:
$reg = new registry();
$reg->arr = array(1,2,3);
$reg->arr = 4;
你期待:
Array
(
[arr] => Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
)
)
您需要做的就是将__set
方法更新为:
public function __set($key, $val){
if(!array_key_exists($key, $this->_vars)){
$this->_vars[$key] = array();
}
$this->_vars[$key] = array_merge($this->_vars[$key], (array)$val);
}
答案 1 :(得分:3)
您需要更改__get()的定义,以便通过引用返回:
public function &__get($key) {
return $this->_vars[$key];
}