那是几年前的事了……大概在2018年或2019年,我买了一本名为《专业PHP函数式编程》的书。
当时函数式编程正风靡一时,于是我决定用自己最熟悉的语言来学习它。
书中深入到某个地方时,作者提到不建议在PHP中使用单子(Monad)。首先,在我看来,整本书的重点就是学习“神秘的单子”;其次,别人越是告诉我不要做某件事,我就越想去做。于是,这场巨大的误入歧途之旅便开始了,我祈祷它终于快要结束了。
我还读过克里斯托弗·皮特(Christopher Pitt)写的《类型化PHP》一书。结合书中的思想,再加上我希望在内容管理工作中运用这些函数式技术,这让我一头扎进各种兔子洞,试图寻找所谓的“终极工具箱”或“终极方法”——那种能让我成为传说中十倍效率忍者高手的深刻理解,然后我就能回归音乐创作,同时让我的系统开始带来被动收入。
暂且不提这些背景故事,我来到这里是因为我正试图记录下这个软件包开发的最后阶段。我希望能把这段时间的工作整理出来,或许在不久的将来对某个人有所帮助。希望那个人就是我自己。
哈。
实际上,我正在重构一些代码,这些代码基于我之前开发的内容管理层的一个版本。当时我错误地认为,给所有东西都加上一个bind方法,并让类型遵循单子接口会很酷。
在经历注意力缺陷多动障碍(ADHD)导致的倦怠并重新充电之后,我回过头来意识到自己有点跑偏了。
最终,我恍然大悟:我需要一个“pipe”(管道)方法,让我能够继续进行方法链式调用,从而构建出一条清晰的处理流水线。
所以……这里的“all_images”是从一个WordPress实例中获取的图像集合(列表,Lst)。我们对这些图像应用部分组件映射,并将其归约为一个字符串对象(Str)(这同样受到克里斯托弗·皮特《类型化PHP》一书的影响)。
由于“inc”函数返回的是一个Str类型的对象,我当时觉得使用bind是合理的。但后来我意识到了自己的错误,于是移除了它,结果却引发了可怕的致命错误。幸运的是,我在ChatGPT的帮助下进行了深入思考,并实现了一个“pipe”方法,使我能够访问整个对象。而且最棒的是,我的返回类型可以是任意类型——尽管在这个例子中这并不重要。
所以……
$all_images = $all_images
->map(fn($x) => inc("partials/masonry-gallery/card-wrap")([
"content" => inc("partials/masonry-gallery/card")($x),
"image" => $x['img_src'],
]))
->reduce(fn(Str $acc, $x) => 免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。