tap函数的日常使用

tap解释

function tap($value, $callback = null)
{
/*
if (is_null($callback)) {
      return new HigherOrderTapProxy($value);
}
*/
  $callback($value);
  return $value;
}

参数 传递给 闭包,并且返回 参数

(关于 HigherOrderTapProxy 百度一下把,很简单,不是本篇要吹的内容)

日常使用

一般都是跟对象打交道,这里要说明下: 对象引用传值的
例如:

    $user = new User();
    $user->id = 1;
    $callback = function ($user){
        $user->id = 999;
    };
    $callback($user);
    echo $user->id; // 999

阅读量增加

$article = tap(Article::find(1),function ($article) {
    $article->increment('view');
});

流接口模式

    public function setData($data)
    {

        // 正常
        $this->data = $data;
        return $this;

        //  tap
        return tap($this,function ($hello) use ($data) {
            // 这个$hello就是闭包外面的$this  闭包内的$this也是闭包外的$this(类)
            $this->data = $data;
        });

        // php8写法
        return tap($this,fn() => $this->data = $data);
    }

凑个数

用tap来写一些骚写法

本作品采用《CC 协议》,转载必须注明作者和本文链接
专心学习不瞎搞
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4

日常真的会用tap吗。。

2年前 评论

你最后一张图, 用不用 tap 都一样吧, 直接 all 不要 each 直接 map 就行, 有点强行 tap 的感觉. 在我看来什么时候用 tap, laravel 源码最常见的一个场景, 不想声明一个变量的时候,. 如:

    public function updateOrCreate(array $attributes, array $values = [])
    {
        $instance = $this->firstOrNew($attributes);
        $instance->fill($values);
        $instance->save();

        return $instance;
    }


    public function updateOrCreate(array $attributes, array $values = [])
    {
        return tap($this->firstOrNew($attributes), function ($instance) use ($values) {
            $instance->fill($values);

            $instance->save();
        });
    }

    public function updateOrCreate(array $attributes, array $values = [])
    {
        return tap($this->firstOrNew($attributes), function ($instance) use ($values) {
            $instance->fill($values);

            $instance->save();
        });
    }

还有另一种可能不常见, 但是可以举例出来, 为什么更喜欢用map函数而不是foreach的, 因为参数类型

// 没有提示
foreach ($items as $item) {

}

// 可以提示
collec($items)->map(fn(Xxx $item) => $item)

// tap
tap($a, fn(Xxx $a) => $a->xx);
2年前 评论
   //这是php7.4的写法,并不是8的特性
     tap($this,fn() => $this->data = $data);
8个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
未填写
文章
87
粉丝
105
喜欢
480
收藏
717
排名:109
访问:8.7 万
私信
所有博文
社区赞助商