4

我的问题是,假设我们有一堂课:

class SomeClass{

    private $someProperty;


    public function __call($name,$arguments){
        echo "Hello World";
}

现在当我说:

$object = new SomeClass();
$object->someMethod();

将调用我班级中的 __call 方法。

当我说

$object->getSomeProperty();

__call 会再次被调用吗?如果是这样,__get 和 __set 魔术方法是干什么用的?

当我说

$object->someProperty;

那么 __get($someProperty) 会被调用吗?还是会是 __set($someProperty) ?

4

2 回答 2

16

任何时候调用不可访问的方法__call都会被调用。

任何时候你尝试读取一个属性都会被调用,__get无论是echo $obj->prop;$var = $obj->prop;

最后,每当您尝试写入属性时,__set都会调用魔术方法。

于 2013-01-28T18:23:45.920 回答
1

__call 会再次被调用吗?

是的。

如果是这样,__get 和 __set 魔术方法是干什么用的?

见下文:

当我说

$object->someProperty;

那么 __get($someProperty) 会被调用吗?还是会是 __set($someProperty) ?

__get('someProperty')因为这个表达式不是赋值。

于 2013-01-28T18:24:04.903 回答