累積實戰經驗後,發現幾個關鍵習慣能大幅提升開發效率與程式碼品質。這 10 大技巧涵蓋架構設計、安全防護、除錯技巧與團隊協作,適合中階以上開發者參考。
採用 index.php?page=module&action=method 模式,集中處理請求分派、權限驗證、共用初始化。避免散落多個獨立 PHP 檔案造成維護惡夢。
$action = $_REQUEST['action'] ?? 'default';
// 替代繁瑣的 isset($_GET['action']) ? $_GET['action'] : ...
注意:$_REQUEST 合併 GET/POST/COOKIE,安全敏感操作(刪除、付款)仍建議明確指定 $_POST。
function dd($data) {
echo '<pre>';
var_dump($data);
echo '</pre>';
die();
}
// 使用:dd($userObject); 即時檢查變數結構並停止執行
嚴格分離:PHP 處理資料邏輯、模板只負責呈現。團隊協作時前後端可平行開發,減少衝突。
<?php // config.php
return [
'db' => ['host' => 'localhost', 'name' => 'myapp', 'user' => '...', 'pass' => '...'],
'app' => ['debug' => true, 'timezone' => 'Asia/Taipei'],
'upload' => ['path' => '/var/www/uploads', 'max_size' => 5 * 1024 * 1024],
];
以 $config = require 'config.php'; 載入,避免 global 關鍵字污染全域命名空間。
<?php // index.php
define('APP_ENTRY', true);
// 內部檔案開頭
if (!defined('APP_ENTRY')) {
http_response_code(403);
exit('Direct access forbidden');
}
class Database {
private PDO $pdo;
public function execute(string $sql, array $params = []): bool {
$stmt = $this->pdo->prepare($sql);
try {
return $stmt->execute($params);
} catch (PDOException $e) {
$this->logError($sql, $params, $e);
throw new RuntimeException('Database operation failed');
}
}
private function logError(string $sql, array $params, PDOException $e): void {
// 記錄 SQL、參數、錯誤訊息、堆疊追蹤
}
}
<?php // UserController.php
$action = $_GET['action'] ?? 'list';
$service = new UserService();
switch ($action) {
case 'create': $service->create($_POST); break;
case 'update': $service->update($_GET['id'], $_POST); break;
case 'delete': $service->delete($_GET['id']); break;
default: $service->list();
}
class ServiceContainer {
private static array $instances = [];
public static function get(string $id): mixed {
if (!isset(self::$instances[$id])) {
self::$instances[$id] = self::create($id);
}
return self::$instances[$id];
}
private static function create(string $id): mixed {
// 依 ID 建立對應服務實例
}
}
// 使用:$db = ServiceContainer::get('database');
這 10 項技巧的核心精神在於:集中化管理、分離關注點、防禦性程式設計、可測試架構。漸進式導入,專案品質與團隊效率將顯著提升。