php __get问题

时间:2011-03-17 10:21:04

标签: php get

如果在类函数getName()中声明 然后,如果我打电话obj->name我猜getName()必须打电话,但我得到Undefined property name 为什么呢?

3 个答案:

答案 0 :(得分:4)

它不是那样的,它更像是这样:

class Foo {
    protected $name;

    public function getName() { 
        return $this->name;
    }
    public function __get($key) {
        switch($key) {
            case 'name':
                return $this->getName();
                break;
        }
    }
}

答案 1 :(得分:1)

这不正确。

你可能指的是神奇的__get方法,它的工作原理如下:

public function __get($name) {
    switch($name) {
        case "name":
            return "whatever";
    }
}

如果您执行whatever,则会返回$obj->name

要从whatever返回$obj->getName(),您需要覆盖__call,如下所示:

public function __call($name, $arguments) {
    if (strpos($name, 'get') !== 0) {
        return;
    }

    $name = substr($name, 3);
    switch($name) {
        case 'Name': // case sensitive!
            return 'whatever';
    }
}

See it in action here

注意:通常你会得到一个可以在数组中返回的属性的名称,而不是用硬编码的值写一个switch语句(为了更大的灵活性)。

答案 2 :(得分:0)

__get方法的工作原理如下

class Test {
    private $var1;
    private $var2;

    function __construct($1, $2) {
        $this->var1 = $1;
        $this->var2 = $2;
    }

    function __get($var) {
        return $this->$var;
    }
}

因此,如果您创建此类的实例...

$tst = new Test("hello", "world");
print $tst->var1;

结果将是

hello