首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 自定義函數完整指南:語法結構、參數傳遞、返回值、變量作用域與最佳實踐

     編輯:PHP 綜合知識

函數是代碼復用與模組化的基本單元。PHP 支援用戶自定義函數,提供豐富的參數機制、類型聲明、可變參數等現代特性。

基本語法結構

function 函數名(參數列表) : 返回類型 {
    函數體;
    return 返回值;
}

完整範例:四則運算計算器

funcs.php

<?php
function jisuan(float $num1, float $num2, string $oper) : float {
    switch ($oper) {
        case '+': return $num1 + $num2;
        case '-': return $num1 - $num2;
        case '*': return $num1 * $num2;
        case '/': 
            if ($num2 == 0) throw new Exception('除數不能為零');
            return $num1 / $num2;
        default:
            throw new InvalidArgumentException("不支援的運算符: $oper");
    }
}
?>

test.php

<?php
require 'funcs.php';
$num1 = 56; $num2 = 44; $oper = '+';
try {
    $res = jisuan($num1, $num2, $oper);
    echo "計算結果是:$res"; // 100
} catch (Exception $e) {
    echo "錯誤:" . $e->getMessage();
}
?>

參數傳遞機制

模式語法特性適用場景
值傳遞function($a)複製副本,原值不變預設,標量/陣列
引用傳遞function(&$a)操作原變量需修改外部變量
預設值function($a = 10)可選參數提供預設行為
類型聲明function(int $a)強制型別檢查PHP 7+,嚴格模式
可變參數function(...$args)接收任意數量參數PHP 5.6+
命名參數func(name: 'value')按名稱傳遞PHP 8+

引用傳遞範例

<?php
function addPrefix(&$str, $prefix = 'Mr. ') {
    $str = $prefix . $str;
}
$name = 'John';
addPrefix($name);
echo $name; // Mr. John
?>

可變參數與解包

<?php
function sum(...$numbers) {
    return array_sum($numbers);
}
echo sum(1, 2, 3, 4, 5); // 15

$arr = [10, 20, 30];
echo sum(...$arr); // 60 (解包陣列)
?>

返回值與類型聲明

<?php
// 返回類型聲明 (PHP 7+)
function add(int $a, int $b) : int {
    return $a + $b;
}

// 可空返回類型 (PHP 7.1+)
function find(int $id) : ?User {
    return $user ?? null;
}

// void 返回類型 (PHP 7.1+)
function log(string $msg) : void {
    error_log($msg);
}

// 生成器返回 (PHP 5.5+)
function generator() : Generator {
    yield 1; yield 2; yield 3;
}
?>

變量作用域規則

作用域範圍關鍵字
區域函數內部預設
全域腳本全域 (不含函數內)global $var 或 $GLOBALS['var']
靜態函數內部,跨調用保持值static $var
超全域所有範圍自動可用$GLOBALS, $_GET, $_POST 等

匿名函數與閉包 (PHP 5.3+)

<?php
$multiply = function($a, $b) { return $a * $b; };
echo $multiply(3, 4); // 12

// 閉包綁定外部變量 (use)
$factor = 10;
$scale = function($x) use ($factor) { return $x * $factor; };
echo $scale(5); // 50

// 箭頭函數 (PHP 7.4+,自動捕獲外部變量)
$scale = fn($x) => $x * $factor;
?>

最佳實踐

  1. 單一職責:函數只做一件事,< 20 行
  2. 純函數優先:無副作用、相同輸入必得相同輸出
  3. 類型聲明:盡量加標量/返回類型聲明,啟用 declare(strict_types=1)
  4. 錯誤處理:拋出異常而非返回 false/NULL
  5. 命名規範:動詞開頭 getUser()、calculateTotal()、isValid()

函數設計質量直接決定代碼可維護性,遵循 SOLID 原則中的單一職責與介面隔離,構建清晰的抽象層次。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved