枯燥的 API 速查表、死記硬背的函數參數,是初學者放棄的主因。本文提出「微項目驅動學習法」:每學一個知識點,立即構想一個**能跑通、能看見效果、能裝飾進作品集**的微型專案,將抽象語法轉化為具體成就感。
getimagesize():獲取圖片尺寸與類型imagecreatefromjpeg/png/gif():載入圖片資源imagecolorat():取指定坐標像素顏色索引imagecolorsforindex():索引轉 RGB 數組<?php
// pixel_avatar.php
$src = 'logo.gif'; // 小尺寸 GIF,如 64x64
list($w, $h, $type) = getimagesize($src);
$create = ['imagecreatefromgif', 'imagecreatefromjpeg', 'imagecreatefrompng', 'imagecreatefromwbmp'][$type] ?? null;
if (!$create || !is_file($src)) die('需放一張小 GIF/JPG/PNG 為 logo.gif');
$im = $create($src);
echo "<style>.c{display:inline-block;width:8px;height:8px;margin:0;padding:0;line-height:8px;font-size:6px}</style>";
for ($y = 0; $y < $h; $y++) {
for ($x = 0; $x < $w; $x++) {
$idx = imagecolorat($im, $x, $y);
$rgb = imagecolorsforindex($im, $idx);
printf('<span class="c" style="background:rgb(%d,%d,%d)"> </span>', $rgb['red'], $rgb['green'], $rgb['blue']);
}
echo "<br>";
}
imagedestroy($im);
瀏覽器訪問該腳本,Logo 變成由數百個彩色 <span> 拼成的「像素畫」,縮放瀏覽器窗口還能看到「馬賽克」動態感。改一行換字符、換字體、加動畫,瞬間獲得「哇,這是我寫的?」成就感。
| 知識點 | 微項目創意 | 預估時間 |
|---|---|---|
文件操作 fopen/fread/fwrite | 「每日一句」API:讀取 quotes.txt 隨機一行輸出 JSON | 10 min |
正則 preg_match_all | 「網頁標題提取器」:輸入 URL 輸出 <title> | 15 min |
| Session/Cookie | 「訪問計數器」:顯示你是第 N 位訪客,並記錄最近 5 次時間 | 10 min |
cURL GET/POST | 「天氣預報卡」:調用免費天氣 API 生成圖片分享卡 | 20 min |
| JSON + 數組操作 | 「JSON 美化器」:貼上壓縮 JSON 輸出縮進高亮 HTML | 15 min |
| GD 繪圖 | 「驗證碼生成器」/「漸變頭像」/「二維碼裝飾框」 | 20 min |
| PDO 預處理 | 「留言板」:SQLite + PDO,100 行完成 CRUD | 30 min |
| Composer + 第三方庫 | 「Markdown 轉 HTML」:引入 erusev/parsedown 做在線預覽 | 15 min |
基礎語法 → 變量/流程控制/函數
↓
數組/字符串/文件 → 微項目:配置文件解析器
↓
表單/Session/資料庫 → 微項目:迷你博客/留言板
↓
GD/圖片處理 → 微項目:動態海報生成器
↓
cURL/HTTP 客戶端 → 微項目:聚合熱搜榜/天氣訂閱
↓
Composer/命名空間/PSR-4 → 微項目:發布第一個 Packagist 包
↓
框架/Laravel/Symfony → 微項目:重構留言板為 REST API
↓
測試/PHPUnit/CI → 微項目:為包添加 80%+ 覆蓋率
↓
部署/Docker/K8s → 微項目:將 API 容器化上線
array_map 回調。編程是手藝,**手藝只能通過「做」來學會**。
不要問「這個函數有什麼用」,要問「我用這個函數能做出什麼好玩的東西」。
每一個微項目,都是通往高手之路的一塊腳下磚。
從今天開始,打開編輯器,寫下你的第一個「無用但好玩」的 PHP 腳本吧!