教大家写一个可以传入回调方法参数的方法

admin 2022-07-14 18:41:00 2277

我想各位写php的小伙伴,经常会写下面的这种代码,如下图(php内置的array_walk()方法)

<?php
$elements = ['a', 'b', 'c'];
array_walk($elements, function ($value, $key) {
  echo "{$key} => {$value}\n";
});
?>

那下面我们就试着自己写一个吧!比如有这么一个场景,做一个简单的缓存方法,实现“缓存存在读缓存,不存在则传入一个回调方法设置缓存数据,并返回结果”,下面我们直接看代码吧!伪代码如下(假设用redis):

<?php
Class CacheManager {
    /**
     * @param $key
     * @param Closure $valueClosure
     * @param $timeout
     * @return bool|Closure|mixed|string
     */
    static function remember($key, Closure $valueClosure, $timeout) {
        try {
            $redis = new Redis();
            //$redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_JSON);
            $redis->setOption(Redis::OPT_SERIALIZER, Redis::SERIALIZER_PHP);
            if($redis->exists($key))
                return $redis->get($key);
            $data = $valueClosure();
            $redis->set($key, $data, $timeout);
            return $data;
        } catch (Exception $e){
            return false;
        }
    }
}
//tips: 使用方式如下
$value = CacheManager::remember('key', function() {
    return DB::get('xxxxxx');
}, 1000);

其实很简单,就是优先获取缓存数据,如果不存在则使用数据库查询数据并设置缓存。。。

可爱猫?Telegram电报群 https://t.me/ikeaimao

社区声明 1、本站提供的一切软件、教程和内容信息仅限用于学习和研究目的
2、本站资源为用户分享,如有侵权请邮件与我们联系处理敬请谅解!
3、本站信息来自网络,版权争议与本站无关。您必须在下载后的24小时之内,从您的电脑或手机中彻底删除上述内容
最新回复 (0)

您可以在 登录 or 注册 后,对此帖发表评论!

返回