<?php
function add(int $a, int $b): int {
return $a + $b;
}
$result = add(2, 3); // 5
?>
return 立即結束函數,可省略(隱含回傳 null)。
<?php
function stats(array $numbers): array {
return [
'sum' => array_sum($numbers),
'avg' => array_sum($numbers) / count($numbers),
'min' => min($numbers),
'max' => max($numbers),
];
}
['sum' => $sum, 'avg' => $avg] = stats([1,2,3,4,5]);
echo "Sum: $sum, Avg: $avg";
?>
<?php
function swap($a, $b) {
return [$b, $a];
}
[$x, $y] = swap(1, 2); // $x=2, $y=1
?>
<?php
class Container {
private array $data = [];
public function &getRef(string $key) {
return $this->data[$key];
}
}
$c = new Container();
$c->getRef('name') = 'PHP'; // 直接修改內部屬性
echo $c->getRef('name'); // PHP
?>
慎用:破壞封裝,難以追蹤副作用。優先考慮 setter 方法。
| 語法 | 用途 | 範例 |
|---|---|---|
function(&$var) | 輸入參數參考,修改原變數 | func(&$x) |
function() : &$var | 回傳參考,呼叫端可修改內部狀態 | &getRef() |
<?php
declare(strict_types=1);
function divide(float $a, float $b): float {
if ($b === 0.0) throw new DivisionByZeroError();
return $a / $b;
}
// 型別錯誤拋出 TypeError
divide(10, 2); // float(5)
divide('10', 2); // TypeError (strict)
?>
<?php
function rangeGen(int $start, int $end): Generator {
for ($i = $start; $i <= $end; $i++) {
yield $i;
}
return 'done'; // PHP 7+ 可用 getReturn()
}
$gen = rangeGen(1, 3);
foreach ($gen as $v) { echo $v; } // 123
echo $gen->getReturn(); // done
?>
strict_types=1stdClass,語意清晰Generator 惰性產生,節省記憶體