定义与调用函数
使用参数和返回值创建自己的函数。
定义与调用函数 是 CoddyKit 上的免费 PHP Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 PHP Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 PHP Academy 课程共包含 4 节课。
为什么需要函数?
函数可以封装可复用的逻辑,并为其命名,以便您多次调用而不必重复代码。优点包括:
- 避免重复(DRY 原则)
- 更易于测试和调试
- 代码能够自我说明
定义函数
使用 function 关键字、名称、可选参数和函数体:
<?php
function greet(string $name): string {
return 'Hello, ' . $name . '!';
}
echo greet('Alice'); // Hello, Alice!参数与实参
参数是定义中的变量名;实参是调用函数时传入的实际值:
<?php
function add(int $a, int $b): int {
return $a + $b; // $a and $b are parameters
}
$sum = add(3, 4); // 3 and 4 are arguments
echo $sum; // 7返回值
使用 return 将值传回调用方。没有 return 的函数会返回 NULL:
<?php
function square(float $n): float {
return $n * $n;
}
function logMessage(string $msg): void {
echo '[LOG] ' . $msg . PHP_EOL;
// void functions must not return a value
}
echo square(4); // 16
logMessage('started'); // [LOG] started按值传递与按引用传递
默认情况下,PHP 按值传递实参(传递副本)。在实参前加上 & 即可按引用传递:
<?php
function doubleByValue(int $n): void {
$n *= 2; // changes only the local copy
}
function doubleByRef(int &$n): void {
$n *= 2; // changes the original
}
$x = 5;
doubleByValue($x);
echo $x; // 5 — unchanged
doubleByRef($x);
echo $x; // 10 — changed多个返回点
函数可以包含多个 return 语句,以便提前退出:
<?php
function divide(float $a, float $b): ?float {
if ($b === 0.0) {
return null; // early return on error
}
return $a / $b;
}
var_dump(divide(10, 0)); // NULL
echo divide(10, 2); // 5函数提升
PHP 函数在整个文件中都可用,无论其定义位置在哪里。与 JavaScript 不同,大多数 PHP 函数不需要在使用前声明:
<?php
echo double(5); // 10 — works even though double is defined below
function double(int $n): int {
return $n * 2;
}
// Exception: functions inside conditionals ARE position-sensitive递归函数
调用自身的函数称为递归函数。请始终确保存在基本情况,以避免无限递归:
<?php
function factorial(int $n): int {
if ($n <= 1) return 1; // base case
return $n * factorial($n - 1); // recursive call
}
echo factorial(5); // 120类型声明
PHP 7 及更高版本支持参数和返回类型提示。PHP 8 添加了 mixed、never 和交集类型:
<?php
declare(strict_types=1);
function clamp(int $value, int $min, int $max): int {
return max($min, min($max, $value));
}
echo clamp(150, 0, 100); // 100
echo clamp(-5, 0, 100); // 0
echo clamp(42, 0, 100); // 42命名函数与内置函数
PHP 自带数千个内置函数。您始终可以在运行时检查某个函数是否存在:
<?php
if (function_exists('mb_strlen')) {
echo mb_strlen('こんにちは'); // 5 — correct multi-byte length
} else {
echo strlen('こんにちは'); // 15 — byte count, wrong for UTF-8
}返回多个值
返回一个数组,并在调用位置进行解构,即可返回多个值:
<?php
function minMax(array $arr): array {
return [min($arr), max($arr)];
}
[$min, $max] = minMax([3, 1, 7, 2, 9]);
echo "Min: $min, Max: $max"; // Min: 1, Max: 9快速检查
没有显式 return 语句的 PHP 函数会返回什么?
回顾:函数
PHP 函数要点:
- 使用
function name(params): returnType定义函数 - 默认按值传递,也可以使用
&按引用传递 - 没有 return 的函数会返回 NULL
- 递归需要基本情况
- 函数在整个文件中都可用(函数提升)
下一步:默认参数和可变参数。
常见问题解答
「定义与调用函数」课时是免费的吗?
是的 — 「定义与调用函数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 PHP Academy 课程的其余内容,请升级到 CoddyKit PRO。 PHP Academy 课程共包含 4 节课。
「定义与调用函数」这节课中我会学到什么?
使用参数和返回值创建自己的函数。 你通过在浏览器中直接运行的动手代码来练习 PHP Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 PHP Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 PHP Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「定义与调用函数」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 PHP Academy 课中编写并运行代码吗?
能。每节 PHP Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 定义与调用函数
- 默认参数与可变参数
- 变量作用域:局部与全局
- 匿名函数与闭包