PHP 超過 700 種內建函數外,開發者可自訂函數封裝邏輯,提升程式碼複用性、可讀性與可測試性。
<?php
function functionName($param1, $param2 = 'default') {
// 函數主體
return $result; // 可選
}
?>
function 開頭。{ } 包裹主體。return 結束執行並回傳值;無 return 或 return; 則回傳 null。<?php
function writeMyName() {
echo 'David Yang';
}
echo 'Hello world!
';
echo 'My name is ';
writeMyName(); // 輸出 David Yang
echo '.
That\'s right, ';
writeMyName();
echo ' is my name.';
?>
輸出:
Hello world! My name is David Yang. That's right, David Yang is my name.
<?php
function cityName($city) {
echo '城市名稱為:' . $city;
}
cityName('Shanghai'); // 城市名稱為:Shanghai
?>
<?php
function cityName($city = 'Beijing') {
echo '城市名稱為:' . $city;
}
cityName(); // 城市名稱為:Beijing
cityName('Shanghai'); // 城市名稱為:Shanghai
?>
<?php
function addPrefix(&$str, $prefix = 'Mr. ') {
$str = $prefix . $str;
}
$name = 'John';
addPrefix($name);
echo $name; // Mr. John
?>
& 表示傳址,呼叫端**不加** & (PHP 5.4+ 呼叫端加 & 已棄用)。<?php
function sum(...$numbers) {
return array_sum($numbers);
}
echo sum(1, 2, 3, 4); // 10
$arr = [5, 6, 7];
echo sum(...$arr); // 18 (解包陣列)
?>
<?php
function add(int $a, int $b): int {
return $a + $b;
}
echo add(1, 2); // 3
// add(1.5, 2); // TypeError (嚴格模式)
?>
int、float、string、bool、array、callable、iterable、類別/介面名稱。declare(strict_types=1);。<?php
// 變數函數:變數值為函數名稱字串
function foo() { echo 'FOO'; }
$func = 'foo';
$func(); // 呼叫 foo()
// 匿名函數 (Closure) 指派給變數
$greet = function($name) { return "Hello $name"; };
echo $greet('World'); // Hello World
// 箭頭函數 (PHP 7.4+)
$double = fn($x) => $x * 2;
echo $double(5); // 10
?>
<?php
function factorial(int $n): int {
return $n <= 1 ? 1 : $n * factorial($n - 1);
}
echo factorial(5); // 120
?>
<?php
if (function_exists('json_encode')) {
echo json_encode(['a' => 1]);
}
?>
/** @param int $id @return User|null */)。