首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将对象克隆到$this

将对象克隆到$this
EN

Stack Overflow用户
提问于 2010-02-25 14:49:56
回答 3查看 1.9K关注 0票数 3

我想问一下有关PHP克隆/复制对象到$this变量的问题。

目前我是MVC的新手,我想做一些像CodeIgniter这样的事情。

我想直接访问变量。

在我的__construct()中,我总是将全局变量传递给新的控制器(类),

例如:

代码语言:javascript
复制
function __construct($mvc)
{
    $this->mvc = $mvc;
}

在$mvc内部获取配置对象,vars对象。

例如,当前

代码语言:javascript
复制
function index()
{
    $this->mvc->config['title'];
    $this->mvc->vars['name'];
}

**我想要的更直接**

代码语言:javascript
复制
function index()
{
    $this->config['title'];
    $this->vars['name'];
}

我试过了

代码语言:javascript
复制
function __construct($mvc)
{
    $this = $mvc;
}

代码语言:javascript
复制
function __construct($mvc)
{
    $this = clone $mvc;
}

它没有成功。你知道,我可以把$this->mvc关闭到$this级别吗?我每试一次也没有成功。请帮帮忙,谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-25 15:12:08

一个不错的解决方案是覆盖__get()

代码语言:javascript
复制
public function __get($name) {
    return $this->mvc->$name;
}

每当您尝试访问类中不存在的属性时,都会调用__get()。这样,您就不必在类中复制mvc的每个属性(这可能会覆盖类中的属性)。如有必要,您还可以使用property_exists检查mvc中是否存在$name

票数 7
EN

Stack Overflow用户

发布于 2010-02-25 14:56:03

看起来这就是你要做的..。

代码语言:javascript
复制
function __construct($mvc)
{
    foreach($mvc as $k => $v) {

        $this->$k = $v;

    }

}
票数 1
EN

Stack Overflow用户

发布于 2010-02-25 16:02:44

代码语言:javascript
复制
public function __get($name) 
{
    if (array_key_exists($name, $this->mvc)) 
    {
       return $this->mvc->$name;
    }

    $trace = debug_backtrace();
        trigger_error(
            'Undefined property via __get(): ' . $name .
            ' in ' . $trace[0]['file'] .
            ' on line ' . $trace[0]['line'],
            E_USER_NOTICE);
        return NULL;
}

我添加这个是为了验证。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2332194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档