logo

额外区块类型 (EBT) - 全新的布局构建器体验❗

额外区块类型 (EBT) - 样式化、可定制的区块类型:幻灯片、标签页、卡片、手风琴等更多类型。内置背景、DOM Box、JavaScript 插件的设置。立即体验布局构建的未来。

演示 EBT 模块 下载 EBT 模块

❗额外段落类型 (EPT) - 全新的 Paragraphs 体验

额外段落类型 (EPT) - 类似的基于 Paragraph 的模块集合。

演示 EPT 模块 滚动

滚动

PHP课程 - 第7课 - PHP 函数与函数式编程

09/10/2025, by Ivan

我想我们现在已经到了真正开始编程的阶段。学完这一课之后,你可以自信地说——你已经在用 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. 函数名

函数名的命名规则与变量几乎相同:

  1. 必须以字母或下划线 “_” 开头;
  2. 只能包含字母、数字和下划线(A–Z, a–z, 0–9, _);
  3. 不能有空格;多单词可以使用下划线(例如 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 函数式编程的入门。后续课程中我们将深入探讨如何利用函数实现更复杂、更高效的程序结构。