周梦康 发表于 2016-08-15 2551 次浏览 标签 : php

本来想在构造方法中加一个初始化值的确认,这样每个方法都必须加一个if判断,我临时想到一个方法:

新建一个类,然后在新建类中使用__call或者__callStatic来调用其不存在的方法,然后在其中做统一的判断:

namespace Models\Activity;

use Tool\RedisKeyManager;


class WebinarService
{

    const MAX_FAIL_TIME = 10; // 数据上报最大次数

    /**
     * 所有接口全部都统一检测活动平台健康状态
     *
     * @param $method
     * @param $args
     * @return mixed
     */
    public static function __callStatic($method, $args)
    {
        if (self::getServiceStatus()) {
            $class = __NAMESPACE__."\\ActivityService";
            if (method_exists($class, $method)) {
                return call_user_func_array(array($class, $method), $args);
            }
        }

        return null;
    }

    private static function getServiceStatus()
    {
        $key = RedisKeyManager::get("webinarServiceStatus");
        $redis = ObjectFinder::find('RedisProxy')->getRedis();
        $count = $redis->get($key);

        if ($count && $count >= self::MAX_FAIL_TIME){
            return false;
        }

        return true;
    }
}

但是觉得把简单的事情弄复杂了,不知道是好是坏。


评论列表