discuz_base 分析

<?php

/**
 *      [Discuz!] (C)2001-2099 Comsenz Inc.
 *      This is NOT a freeware, use is subject to license terms
 *
 *      $Id: discuz_base.php 30321 2012-05-22 09:09:35Z zhangguosheng $
 */

if(!defined('IN_DISCUZ')) {
    exit('Access Denied');
}

abstract class discuz_base
{
    private $_e;
    private $_m;

    public function __construct() {

    }

    public function __set($name, $value) {
        $setter='set'.$name;
        if(method_exists($this,$setter)) {
            return $this->$setter($value);
        } elseif($this->canGetProperty($name)) {
            throw new Exception('The property "'.get_class($this).'->'.$name.'" is readonly');
        } else {
            throw new Exception('The property "'.get_class($this).'->'.$name.'" is not defined');
        }
    }

    public function __get($name) {
        $getter='get'.$name;
        if(method_exists($this,$getter)) {
            return $this->$getter();
        } else {
            throw new Exception('The property "'.get_class($this).'->'.$name.'" is not defined');
        }
    }

    public function __call($name,$parameters) {
        throw new Exception('Class "'.get_class($this).'" does not have a method named "'.$name.'".');
    }

    public function canGetProperty($name)
    {
        return method_exists($this,'get'.$name);
    }

    public function canSetProperty($name)
    {
        return method_exists($this,'set'.$name);
    }

    public function __toString() {
        return get_class($this);
    }

    public function __invoke() {
        return get_class($this);
    }

}
?>

discuz_base作为抽象类自定义了 几个魔术函数  有

方法:

 __set();

__get();

__call();

canGetProperty();

canSetProperty();

__tostring();

__invoke();

posted on 2015-09-04 15:14  holy翟翟  阅读(46)  评论(0编辑  收藏  举报

导航