零、序言
函数式编程是一种范例,每年都会出现在会议上。JavaScript 社区可能是最早接触该主题的社区之一,但现在使用各种其他语言(如 Ruby、Python 和 Java)的开发人员也在讨论该主题。
PHP 具有开始使用函数式方法进行开发所需的大部分功能。你没有理由袖手旁观,这就是为什么这本书建议教你函数式编程的基本原理。
如果你对函数式编程完全陌生,或者你想更新你的基础知识,了解一下它的历史和优点,我建议你从附录开始。这不是本书的第一章,因为内容与 PHP 没有直接关系,但它将帮助您将各种主题置于上下文中,并更好地了解本书所涵盖的主题。
这本书涵盖的内容
第一章作为 PHP中的一等公民,讨论函数式编程,顾名思义,是如何围绕函数展开的。在本章中,您将了解在 PHP 中声明和使用它们的各种方式。
第 2 章纯函数、引用透明性和不变性涵盖了构成任何函数代码库基石的三个概念。您将了解它们是关于什么的,以及如何将它们应用于我们的利益。
第 3 章,PHP中的函数基础,讨论了函数式编程与任何范例一样,如何基于几个核心概念。在继续之前,本章将以简单的方式介绍它们。
第 4 章组合函数描述了如何使用函数组合将函数用作构建块。在本章中,您将学习如何在 PHP 中执行此操作,并了解在执行此操作时需要记住的重要事项。
第 5 章、函子、应用和单子从更简单的概念开始,例如函子和应用,我们将积累我们的知识,最终以一种光来呈现单子,这将消除围绕这一术语的一些恐惧。
第 6 章现实生活中的单子,帮助您了解单子抽象的一些实际用法,以及如何使用它来编写更好的代码。
第 7 章、函数技术和主题从函数编程的广阔领域中,对类型系统、模式匹配、无点风格等主题进行了深入探讨。
第 8 章测试告诉您,函数式编程不仅有助于编写易于理解和维护的代码,而且有助于简化测试。
第 9 章性能效率让您知道在 PHP 中使用函数技术是有成本的。我们将首先讨论它,然后看看它在其他性能相关主题中有何帮助。
第 10 章、PHP 框架和 FP介绍了一种可以应用于任何项目中改进代码的技术,因为目前 PHP 中有专门的函数编程框架。
第 11 章设计一个功能性应用,如果您想使用尽可能多的功能性代码开发整个应用,将为您提供一些建议。您还将了解函数式反应式编程和 RxPHP 库。
Appendix
,当我们谈论函数式编程时,我们在谈论什么?*是函数式编程的介绍和历史,以及它的优点和术语表。这确实是本书的第一部分,您应该阅读,但由于我们没有从 PHP 的角度来探讨这个主题,所以它作为附录呈现。
这本书你需要什么
您需要访问安装了 PHP 的计算机。如果您知道如何使用命令行,这将更容易,但是所有示例也应该在浏览器中工作,可能需要进行一些小的修改。
在学习函数式编程时,我还建议使用 Read-Eval-Print 循环(REPL)。我在写这本书的时候用过鲍里斯。您可以在找到它 https://github.com/borisrepl/boris 。另一个不错的选择是PsySH(http://psysh.org 。
尽管 REPL 不是强制性的,但它可以让您快速测试您的想法,并使用本书中介绍的各种概念,而无需在编辑器和命令行之间切换。
我还假设您有可用的 Composer,并且您知道如何使用它来安装新软件包;如果没有,您可以在找到 https://getcomposer.org 。本书中将介绍多个库,安装它们的首选方法是使用 composer。
本书中编写的所有代码都在 PHP7.0 上进行了测试,PHP7.0 实际上是推荐的版本。但是,它也应该在任何更新的版本上运行。在对 PHP5.6 进行了一些小的修改之后,在 PHP5.6 上运行大多数示例也可以。在本书中,我们将使用 PHP7.0 中引入的新标量类型暗示功能,但是如果删除这些功能,代码应该可以与较低版本兼容。
这本书是给谁的
这本书不需要函数式编程的知识;但是,需要有编程经验。此外,面向对象编程的基本概念将不会被深入介绍。
对 PHP 语言的深入了解不是强制性的,因为将解释不常见的语法。这本书应该是可以理解的人谁没有写一行 PHP 代码,一些努力。
这本书可以看作是一本关于 PHP 函数式编程的入门书,这意味着我们将逐步积累知识。然而,由于主题非常广泛,页面数量有限,我们有时会快速移动。这就是为什么我鼓励您在学习时使用各种呈现的概念,并在每章末尾花一些时间确保您正确理解它们。
公约
在本书中,您将发现许多文本样式可以区分不同类型的信息。下面是这些风格的一些例子,并解释了它们的含义。
文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄如下所示:“下一行代码读取链接并将其分配给BeautifulSoup
函数。”
代码块设置如下:
<?php
function getPrices(array $products) {
$prices = [];
foreach($products as $p) {
if($p->stock > 0) {
$prices[] = $p->price;
}
}
return $prices;
}
当我们希望提请您注意代码块的特定部分时,相关行或项目以粗体显示:
<?php
function getPrices(array $products) {
$prices = [];
foreach($products as $p) {
**if($p->stock > 0) {**
** $prices[] = $p->price;**
** }**
}
return $prices;
}
**任何命令行输入或输出的编写方式如下:
composer require rx/stream
新术语和重要词语以粗体显示。您在屏幕上看到的文字(例如,在菜单或对话框中)显示在文本中,如下所示:“单击下一个按钮将移动到下一个屏幕。”
注
警告或重要注释显示在这样的框中。
提示
提示和技巧如下所示。
读者反馈
我们欢迎读者的反馈。让我们知道你对这本书的看法你喜欢还是不喜欢。读者反馈对我们来说很重要,因为它可以帮助我们开发出您将真正从中获得最大收益的标题。要向我们发送一般反馈,只需发送电子邮件 feedback@packtpub.com,并在邮件主题中提及该书的标题。如果您对某个主题有专业知识,并且您有兴趣撰写或贡献一本书,请参阅我们的作者指南www.packtpub.com/authors。
客户支持
既然您是一本 Packt 图书的骄傲拥有者,我们有很多东西可以帮助您从购买中获得最大收益。
下载示例代码
您可以从您的帐户下载本书的示例代码文件 http://www.packtpub.com 。如果您在其他地方购买了本书,您可以访问http://www.packtpub.com/support 并注册,将文件直接通过电子邮件发送给您。
您可以通过以下步骤下载代码文件:
- 使用您的电子邮件地址和密码登录或注册我们的网站。
- 将鼠标指针悬停在顶部的支架选项卡上。
- 点击代码下载&勘误表。
- 在搜索框中输入图书名称。
- 选择要下载代码文件的书籍。
- 从您购买本书的下拉菜单中选择。
- 点击代码下载。
下载文件后,请确保使用以下最新版本解压或解压缩文件夹:
- WinRAR/7-Zip for Windows
- 适用于 Mac 的 Zipeg/iZip/UnRarX
- 适用于 Linux 的 7-Zip/PeaZip
该书的代码包也托管在 GitHub 上的https://github.com/PacktPublishing/Functional-PHP 。我们在上还提供了丰富的书籍和视频目录中的其他代码包 https://github.com/PacktPublishing/ 。看看他们!
勘误表
虽然我们已尽一切努力确保内容的准确性,但错误确实会发生。如果您在我们的一本书中发现错误,可能是文本或代码中的错误,如果您能向我们报告,我们将不胜感激。通过这样做,您可以使其他读者免于沮丧,并帮助我们改进本书的后续版本。如果您发现任何错误,请访问进行报告 http://www.packtpub.com/submit-errata ,选择您的书籍,点击勘误表提交表链接,输入您勘误表的详细信息。一旦您的勘误表得到验证,您的提交将被接受,勘误表将上载到我们的网站或添加到该标题勘误表部分下的任何现有勘误表列表中。
要查看之前提交的勘误表,请转至https://www.packtpub.com/books/content/support 并在搜索字段中输入图书名称。所需信息将出现在勘误表部分下。
盗版
在互联网上盗版版权材料是所有媒体都面临的一个持续问题。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上发现任何形式的非法复制品,请立即向我们提供地址或网站名称,以便我们采取补救措施。
请联系我们 copyright@packtpub.com 与怀疑盗版材料的链接。
我们感谢您在保护我们的作者方面提供的帮助以及我们为您带来有价值内容的能力。
问题
如果您对本书的任何方面有疑问,请联系我们 questions@packtpub.com,我们会尽力解决这个问题。***
版权属于:月萌API www.moonapi.com,转载请注明出处