当我调用不存在的方法时,为什么调用__get而不是__call?

时间:2016-11-24 19:54:46

标签: php magic-methods

我有一个看起来像这样的课程:

class MyClass
{
    public __get($prop)
    {
        $method = 'get' . ucfirst($prop);
        if (method_exists($this, $metodo))
            return $this->$metodo();
        if (property_exists($this, $prop))
            return $this->$prop;

        throw new Exception("Nonexisting property $prop");
    }

    public function __call($method, $args)
    {
        $prop = strtr($method, 'add', '');
        $prop = lcfirst($prop);

        if (is_array($this->$prop))
            array_push($this->$prop, $args[0]);
    }
}

但是如果我做$obj->addTags('test');它会调用__get,那么女巫会给我一个带有消息的异常: "不存在的属性addTags"

我应该如何调用__call而不是我的__get?

提前致谢!

1 个答案:

答案 0 :(得分:0)

我刚用str_replace替换了strtr。 我没有获得正确的属性名称,所以现在它可以工作。

我会在Stack Overflow允许的情况下尽快将其标记为已回答。

: - D