PHP课程 - 第7课 - PHP 函数与函数式编程
我想我们现在已经到了真正开始编程的阶段。学完这一课之后,你可以自信地说——你已经在用 PHP 编程了。编程中经常会有一些代码需要在不同页面或不同的 .php 文件中重复使用。为了避免重复书写相同的代码,PHP 提供了一个强大的工具——函数(function)。
函数 是一段独立的代码块,用于执行某个具体的操作或计算。在前面的课程中,我们已经见过一些常用的 PHP 函数:
- time() —— 返回自 Unix 纪元(1970年1月1日)以来的秒数。
- print()、echo() —— 用于输出文本或 HTML。
- floor() —— 从浮点数中取整,返回小于等于该数的最大整数。
你可能注意到所有函数的形式都是 имя_функции()
。函数名后加上括号 ()
,这就是标准写法。函数命名规则与变量类似,不同之处在于函数名前不需要美元符号 $
。
函数的结构
让我们看一个例子:
<?php function plus_one($x){ // 定义函数 $x = $x + 1; // 函数体 return $x; // 返回值 } $y = 1; $y = plus_one($y); // 调用函数 print $y; ?>
这个函数的作用很简单:为传入的变量加 1。下面我们逐步解析它的结构。
1. 函数名
函数名的命名规则与变量几乎相同:
- 必须以字母或下划线 “_” 开头;
- 只能包含字母、数字和下划线(A–Z, a–z, 0–9, _);
- 不能有空格;多单词可以使用下划线(例如
my_function()
)或驼峰写法(myFunction()
)。
使用关键字 function 来定义一个新函数,紧接着写函数名。
2. 函数体
函数体是执行的具体代码,写在花括号 {}
中:
function plus_one($x){ $x = $x + 1; return $x; }
3. 返回值
“返回值” 是指通过 return 语句返回的内容。它是函数执行后的结果,可以赋值给变量或直接输出。
4. 参数
函数的参数是写在括号内的变量,用于接收传入的数据。例如:
<?php function myFunction($x1, $x2, $x3){ // 函数体 } $y = myFunction($z, 34, '你好,世界!'); ?>
如果在定义函数时声明了 3 个参数,那么在调用时也必须传入 3 个参数,否则会报错:
<?php function myFunction($x1, $x2, $x3){ } $y = myFunction(34, '你好,世界!'); // 错误:参数数量不匹配 ?>
需要注意的是,定义时的参数名只是占位符;调用函数时可以传入任何变量或值。
函数工作示例
假设我们有一个数学函数 y = -2x + 4,我们想计算不同 x 值时的结果:
<?php function myFunction($x){ $y = -2 * $x + 4; return $y; } $z1 = myFunction(1); $z2 = myFunction(2); $z3 = myFunction(3); print $z1 . '<br />' . $z2 . '<br />' . $z3; ?>
结果将输出:-2, 0, 2。很直观地说明了函数的执行机制。
函数式编程
所谓“函数式编程”,顾名思义,就是以函数为核心的编程方式。一个项目可能包含几十、上百甚至上千个函数。那如何管理这些函数呢?其实很简单——将功能相似的函数分文件保存并模块化。
举个例子:
<?php function incr($x){ $x++; return $x; } function decr($y){ $y--; return $y; } $z = 0; $z = incr($z); $z = incr($z); $z = incr($z); $z = incr($z); $z = decr($z); print $z; ?>
这里我们让 $z
连续加 4 次,再减 1 次,结果是 3。如果把函数定义移到脚本的末尾,结果仍然相同:
<?php $z = 0; $z = incr($z); $z = incr($z); $z = incr($z); $z = incr($z); $z = decr($z); print $z; function incr($x){ $x++; return $x; } function decr($y){ $y--; return $y; } ?>
因为 PHP 在执行脚本前会先解析整个文件,因此无论函数定义写在前面还是后面,程序都能正常运行。
模块化函数
如果函数数量较多(如 50、100 或 1000 个),最好将其分类并放入独立文件。例如:
decr.php:
<?php function decr($y){ $y--; return $y; } ?>
incr.php:
<?php function incr($x){ $x++; return $x; } ?>
然后在主文件(例如 index.php)中通过 include 引入它们:
<?php include 'incr.php'; include 'decr.php'; $z = 0; $z = incr($z); $z = incr($z); $z = incr($z); $z = incr($z); $z = decr($z); print $z; ?>
这样,你就可以把通用函数独立管理,不会让主文件变得臃肿。结果依然是 3。
这只是 PHP 函数式编程的入门。后续课程中我们将深入探讨如何利用函数实现更复杂、更高效的程序结构。