加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 使用带有2D数组的magic __set()方法

发布时间:2020-12-13 21:36:46 所属栏目:PHP教程 来源:网络整理
导读:如果我有以下注册表类: 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])) ret
如果我有以下注册表类:

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’不能使用魔法设置方法,而且我找不到谷歌的任何有用信息.谢谢你的时间!

解决方法

如果你有:

$reg = new registry();
$reg->arr = array(1,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);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读