0Pricing
PHP Academy · 课时

定义与调用函数

使用参数和返回值创建自己的函数。

定义与调用函数 是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 定义与调用函数
  2. 默认参数与可变参数
  3. 变量作用域:局部与全局
  4. 匿名函数与闭包
← 返回 PHP Academy