PHP中__set()方法的定义

看kissmvc代码的问题

[code="php"]
abstract class KISS_View {

protected $file = '';
protected $vars = array();

function __construct($file='', $vars='') {
    if ($file)
        $this->file = $file;
    if (is_array($vars))
        $this->vars = $vars;
    return $this;
}

function __set($key, $var) {
    return $this->set($key, $var);
}

function set($key, $var) {
    $this->vars[$key] = $var;
    return $this;
}

...

}
[/code]
我想问为什么__set()要调用set(),而不是把set()函数体的代码直接放入__set()中。

[url]http://kissmvc.com/[/url]
[url]http://code.google.com/p/kissmvc-php-mvc-framework/[/url]

因为想在别的类中调用set函数。

如果调用_set只能用
[code="java"]
$obj->key = $value
[/code]
这样的方法。

所以这样做给了使用者更多的选择,可以用属性,也可以用方法,不是很好吗?

都可以。只不过是代码只存在一处了。要不然set方法也直接写代码,那这份逻辑就存在两份了。