基礎語法是構建複雜應用的基石。本文整理幾個經典的 PHP 入門代碼片段,涵蓋循環進階用法、函數定義與調用、預設參數、遞歸算法判斷整數,適合初學者反復練習、理解執行流程。
<?php
for ($counter = 1; $counter <= 6; $counter++) {
echo "Counter is $counter
";
}
// 輸出 1 到 6,每行加粗
?>
<?php
echo "距離星期一還有幾天?";
// 1. 取得當前時間戳
// 2. 條件:date('l', $currentDate) != 'Monday'(當前不是星期一)
// 3. 每次迴圈 +86400 秒(一天)
for (
$currentDate = time(); // 初始化:當前時間戳
date('l', $currentDate) !== 'Monday'; // 條件:不是星期一繼續
$currentDate += 86400 // 步進:加一天
) {
echo "- " . date('l', $currentDate) . "
";
}
echo "
";
?>
解析:`for` 三段式靈活運用——初始化可呼叫函數、條件可用複雜表達式、步進可執行任意語句。此例展示「時間遍歷」思維。
<?php
function printBold(string $text): void {
echo "$text";
}
echo "這行沒有加粗!
";
printBold("這行加粗了!!!");
echo "
這行沒有加粗!
";
?>
<?php
function makeBold(string $text): string {
return "$text";
}
echo "這行沒有加粗!!!
";
echo makeBold("這行被加粗了!!!") . "
";
echo "這行沒有加粗!!!
";
?>
區別:返回值函數可組合、可賦值、可傳遞,更符合函數式編程與現代框架風格。
<?php
function printColored(string $text, string $color = 'black'): void {
echo "$text";
}
printColored("這是黑色字!"); // 使用預設黑色
echo "
";
printColored("這是藍色字!", "blue"); // 覆蓋參數
echo "
";
?>
<?php
function checkInteger(float $number): string {
// 基礎情況
if ($number > 1) {
// 正整數遞歸減 1,直到 0 或 1
return checkInteger($number - 1);
} elseif ($number < 0) {
// 負數轉正再遞歸(注意:遞歸深度 = 絕對值,大數會爆棧)
return checkInteger(-$number - 1);
} else {
// 0 <= number <= 1 區間
if ($number > 0 && $number < 1) {
return "當然不是整數"; // 如 0.5
} else {
return "是的,是整數"; // 0 或 1
}
}
}
// 測試
$tests = [0, 1, 5, -3, 0.5, 100];
foreach ($tests as $n) {
echo "$n 是整數嗎? " . checkInteger($n) . "
";
}
?>
| 問題 | 說明 | 改進 |
|---|---|---|
| 棧溢出 | 大數遞歸深度過大(如 1000000)導致 Maximum function nesting level 錯誤 | 用迴圈:return (int)$num === $num 或 ctype_digit/filter_var |
| 浮點精度 | 浮點數運算誤差(如 0.1 + 0.2 !== 0.3) | 整數判斷用 is_int()、filter_var($v, FILTER_VALIDATE_INT) |
| 負數邏輯 | -$number - 1 邏輯易誤解 | 直接取絕對值 abs($number) |
<?php
// 1. 原生函數(最快、最準)
function isInteger(mixed $value): bool {
return filter_var($value, FILTER_VALIDATE_INT) !== false;
}
// 2. 嚴格型別(PHP 8.0+)
function isStrictInt(int|float|string $value): bool {
if (is_int($value)) return true;
if (is_float($value)) return $value === (int)$value; // 如 5.0
if (is_string($value)) return ctype_digit($value) || ($value[0] === '-' && ctype_digit(substr($value, 1)));
return false;
}
// 3. 正則(靈活但較慢)
function isIntRegex(string $value): bool {
return preg_match('/^-?\d+$/', $value) === 1;
}
?>
這些片段看似簡單,實則蘊含「循環控制流」、「函數簽名設計」、「遞歸終止條件」、「型別系統」等核心概念。初學者請動手敲碼、加斷點觀察變數變化、嘗試改寫為迴圈版本,方能內化為直覺。