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 函数式编程的入门。后续课程中我们将深入探讨如何利用函数实现更复杂、更高效的程序结构。