<commit_before>---
layout: post
title: PHP Closure
categories: [PHP]
description: Something about PHP closures.
keywords: PHP, Closure
---
## 缘由

这几天看了<NAME>写的[《PHP Reactive Programming》](https://www.amazon.com/PHP-Reactive-Programming-Martin-Sikora/dp/1786462877)的第一章*Introduction to Reactive Programming*，其中对*函数式编程*举例时的PHP代码把匿名函数玩出了花，所以下午看了下[关于Closure的文档](http://php.net/manual/en/class.closure.php)。

## 函数式编程

## PHP匿名函数<commit_msg>Functional programming<commit_after>---
layout: post
title: PHP Closure
categories: [PHP]
description: Something about PHP closures.
keywords: PHP, Closure
---
## 缘由

这几天看了<NAME>写的[《PHP Reactive Programming》](https://www.amazon.com/PHP-Reactive-Programming-Martin-Sikora/dp/1786462877)的第一章*Introduction to Reactive Programming*，其中对*函数式编程*举例时的PHP代码把匿名函数玩出了花，所以下午看了下[关于Closure的文档](http://php.net/manual/en/class.closure.php)。

## 函数式编程

函数式编程(Functional Programming)是一种*编程范式*([Programming Paradigm](https://en.wikipedia.org/wiki/Programming_paradigm))。

其要点有三：

* 消除函数副作用(Eliminating side effects)

由于非局部变量改变或跳出函数体的控制语句，而造成的函数*变量不满足交换率的作用。

* 变量不变性(Avoiding mutable data)

不改变非局部变量的状态，并且对于同样的输入，会造成相同的输出。

* 函数作为程序基本数据类型(First-class citizens and higher-order functions)

函数可以作为函数参数、被赋值和作为函数返回值。

## PHP匿名函数
{'fraction_non_alphanumeric': 0.1338709677419355, 'fraction_numerical': 0.016129032258064516, 'mean_word_length': 7.111111111111111, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 3, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3007374', 'n_tokens_mistral': 632, 'n_tokens_neox': 657, 'n_words': 68}