Skip to content

PHP 函数

函数(Functions)是可重用的代码块,用于执行特定的任务。PHP 内置了超过 1000 个函数库,你也可以定义自己的自定义函数。

使用函数有助于组织代码,提高可读性,减少重复(遵循 DRY - Don’t Repeat Yourself - 原则),并提高可维护性。

使用 function 关键字定义函数,后跟函数名称、圆括号 () 和代码块 {}。

语法:

<?php
declare(strict_types=1); // 可选:强制严格类型检查
function functionName(parameters) {
// 要执行的代码
// 可选:返回值;
}
?>

命名约定:

  • 函数名必须以字母或下划线 (_) 开头,后跟字母、数字或下划线。
  • 函数名不区分大小写,但建议始终保持一致的调用方式(例如,按照定义时的方式)。
  • 选择具有描述性的名称,表明函数的作用(例如,calculateTotal,getUserById,formatDate)。常见的命名风格包括 camelCase(如 calculateTotal)或 snake_case(如 get_user_id)。

函数定义并不会立即执行其内部的代码。你需要调用函数来运行其代码。

示例:简单的函数定义与调用

<?php
// 定义函数
function displayWelcomeMessage() {
echo "Hello! Welcome to our website.<br>";
}
// 调用函数
displayWelcomeMessage();
// 输出:Hello! Welcome to our website.<br>
displayWelcomeMessage(); // 再次调用
// 输出:Hello! Welcome to our website.<br>
?>

函数可以接受输入值,这些值称为实参 (arguments)(或函数定义中的形参 (parameters))。实参/形参列在函数定义时的圆括号内,并在函数内部像局部变量一样起作用。

<?php
function greetUser(string $name) { // $name 是一个带有类型提示(type hint)的形参
echo "Hello, " . htmlspecialchars($name) . "!<br>";
}
greetUser("Alice"); // "Alice" 是传递给函数的实参
// 输出:Hello, Alice!<br>
greetUser("Bob");
// 输出:Hello, Bob!<br>
?>

**多个参数:**用逗号分隔。

<?php
function printUserInfo(string $name, int $age) {
echo htmlspecialchars($name) . " is " . $age . " years old.<br>";
}
printUserInfo("Charlie", 30);
// 输出:Charlie is 30 years old.<br>
?>

类型提示 (Type Hinting)(推荐):

现代 PHP 强烈建议对函数参数(以及返回值类型)使用类型提示 (type hinting)。这能提高代码的清晰度,有助于尽早捕获错误,并改善开发工具的支持。

<?php
declare(strict_types=1); // 启用严格类型检查
function addNumbers(int $a, int $b) {
echo $a + $b;
}
addNumbers(5, 10); // 输出:15
// addNumbers("5", "10"); // 如果 strict_types=1,这将导致 TypeError
?>

你可以为参数提供默认值。如果在调用函数时没有传递该特定参数,将使用默认值。

<?php
function setPowerLevel(int $level = 9000) { // 默认等级为 9000
echo "The power level is: $level<br>";
}
setPowerLevel(15000); // 输出:The power level is: 15000<br>
setPowerLevel(); // 输出:The power level is: 9000<br>
?>

注意:在函数定义中,带有默认值的参数通常应该放在没有默认值的参数之后。

函数可以使用 return 语句将值发送回调用它的代码。当 return 执行时,函数会立即停止运行并返回指定的值。

**返回值类型提示:**你可以在(也应该)在圆括号后使用 : 类型 来指定返回值的预期类型。

<?php
declare(strict_types=1);
function sum(int $x, int $y): int { // 声明它返回一个整数
$result = $x + $y;
return $result;
// return 后面的代码不会执行
}
$total = sum(5, 10);
echo "5 + 10 = " . $total . "<br>"; // 输出:5 + 10 = 15<br>
echo "7 + 13 = " . sum(7, 13) . "<br>"; // 输出:7 + 13 = 20<br>
function formatGreeting(string $name): string {
if (empty($name)) {
return "Hello there!"; // 可以提前返回
}
return "Hello, " . htmlspecialchars($name) . "!";
}
echo formatGreeting("Dana") . "<br>"; // 输出:Hello, Dana!<br>
echo formatGreeting("") . "<br>"; // 输出:Hello there!<br>
?>

如果一个函数没有 return 语句,或者使用不带值的 return;,它会隐式地返回 null。

默认情况下,在函数内部定义的变量对于该函数来说是局部的 (local)。它们不能在函数外部访问。同样,在函数外部定义的变量也无法直接在函数内部访问,除非作为参数显式传递或声明为 global(通常不鼓励使用 global;更推荐传递参数)。

  • **可变长度参数列表 (...):**允许函数接受任意数量的参数(例如,function sum(...$numbers): int)。
  • **匿名函数 (Anonymous Functions / Closures):**没有指定名称的函数,常用于回调或赋值给变量。
  • **箭头函数 (Arrow Functions) (fn() => ...):**用于简单匿名函数的简洁语法(PHP 7.4 引入)。

这些高级概念为特定的编程模式提供了更大的灵活性。