嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

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

免费领取阿里云优惠券 我的直播 - 《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;
    }
}

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


嗨,老铁,欢迎来到我的博客!

如果觉得我的内容还不错的话,可以关注下我在 segmentfault.com 上的直播。我主要从事 PHP 和 Java 方面的开发,《深入 PHP 内核》作者之一。

[视频直播] PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路 直播中我将毫无保留的分享我这六年的全部工作经验和踩坑的故事,以及会穿插着一些面试中的 考点难点加分点

评论列表