首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 開發者必知的 10 大效率技巧:從入口檔案到單例模式

     編輯:PHP 綜合知識

技巧 1:單一入口檔案模式 (Front Controller)

不要建立多個獨立 PHP 檔案 (home.php, about.php, contact.php),改用:

// index.php
$page = $_GET['page'] ?? 'home';
$allowed = ['home', 'about', 'contact', 'products'];
if (!in_array($page, $allowed)) $page = 'home';
include "pages/{$page}.php";

優點:集中控制、易於權限檢查、共用配置/資料庫連線、利於重構。

技巧 2:善用 $_REQUEST 統一取得輸入

$action = $_REQUEST['action'] ?? 'default';
// 取代分開寫 $_GET['action'] 和 $_POST['action']

注意:$_REQUEST 合併順序受 request_order 影響 (預設 GP),Cookie 會覆蓋 GET/POST,安全敏感操作請明確指定來源。

技巧 3:var_dump() 是除錯利器

<pre><?php var_dump($variable); ?></pre>
// 或封裝
function dd($var) { echo '<pre>'; var_dump($var); echo '</pre>'; die; }

配合 Xdebug 遠端除錯更強大 (IDE 斷點、變數觀察、堆疊追蹤)。

技巧 4:邏輯與視圖分離 (MVC / 模板引擎)

  • Smarty:經典 PHP 模板引擎、快取、區塊繼承
  • Twig:現代、語法優雅、Symfony 預設、安全自動跳脫
  • Blade:Laravel 內建、編譯為 PHP、效能佳
  • 原生 PHP:簡單專案直接 include 'view.php' 並在視圖中只用 echo $var

核心原則:控制器準備資料,視圖只負責顯示。

技巧 5:全域設定集中管理 (Config 檔案)

// config.php
return [
    'db' => ['host'=>'localhost', 'name'=>'app', 'user'=>'root', 'pass'=>'secret'],
    'app' => ['debug'=>true, 'timezone'=>'Asia/Taipei', 'url'=>'https://example.com'],
    'cache' => ['driver'=>'redis', 'host'=>'127.0.0.1', 'port'=>6379],
];

// 使用
$config = require 'config.php';
$pdo = new PDO("mysql:host={$config['db']['host']};dbname={$config['db']['name']}", $config['db']['user'], $config['db']['pass']);

避免在程式碼中硬編碼、到處散落 global $db。

技巧 6:定義常數防止直接存取內部檔案

// index.php (入口)
define('APP_STARTED', true);

// pages/contact.php (內部檔案)
if (!defined('APP_STARTED')) {
    http_response_code(403);
    exit('Direct access forbidden');
}

保護邏輯檔案、類別檔案不被直接造訪。

技巧 7:資料庫操作封裝為類別

class Database {
    private $pdo;
    public function __construct(array $cfg) {
        $this->pdo = new PDO("mysql:host={$cfg['host']};dbname={$cfg['name']};charset=utf8mb4", $cfg['user'], $cfg['pass']);
        $this->pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }
    public function query(string $sql, array $params = []): array {
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute($params);
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
    public function execute(string $sql, array $params = []): int {
        $stmt = $this->pdo->prepare($sql);
        $stmt->execute($params);
        return $stmt->rowCount();
    }
}

統一錯誤處理、防注入、可測試、易維護。

技巧 8:一個檔案處理輸入,類別處理業務 (Action 模式)

// user.php (輸入處理)
require 'UserController.php';
$action = $_GET['action'] ?? 'list';
$ctrl = new UserController();
switch ($action) {
    case 'list': $ctrl->list(); break;
    case 'show': $ctrl->show($_GET['id'] ?? 0); break;
    case 'create': $ctrl->create($_POST); break;
    default: http_response_code(404);
}

// UserController.php (業務邏輯)
class UserController {
    public function list() { /* ... */ }
    public function show($id) { /* ... */ }
    public function create($data) { /* ... */ }
}

技巧 9:熟知 SQL、善用 JOIN、嚴格輸入驗證

// 參數化查詢 + 明確欄位 + 別名
$sql = "SELECT p.id, p.title, u.username AS author 
        FROM posts p 
        JOIN users u ON p.user_id = u.id 
        WHERE p.status = ? AND p.created_at > ? 
        ORDER BY p.created_at DESC LIMIT 10";
$stmt = $db->prepare($sql);
$stmt->execute(['published', '2024-01-01']);
$posts = $stmt->fetchAll();

技巧 10:單例模式管理共用資源 (如模板引擎、資料庫連線)

class ServiceContainer {
    private static $instances = [];
    public static function get(string $key, callable $factory) {
        if (!isset(self::$instances[$key])) {
            self::$instances[$key] = $factory();
        }
        return self::$instances[$key];
    }
}

// 使用
$smarty = ServiceContainer::get('smarty', fn() => {
    $s = new Smarty();
    $s->setTemplateDir('/templates');
    $s->setCompileDir('/templates_c');
    return $s;
});

$db = ServiceContainer::get('db', fn() => new Database($config['db']));

避免重複建立昂貴資源,全域單一實例。

總結:從「能跑」到「好維護」

新手常見進階實務
每頁一個 .php單一入口 + 路由
直接 $_GET/$_POST輸入驗證 + 白名單
echo 除錯var_dump + Xdebug
HTML 混 PHP模板引擎 / 關注點分離
到處 global $dbConfig + 依賴注入
直接 include 內部檔常數保護 + 自動載入
SQL 字串拼接Prepared Statement + ORM
每次 new Database()單例 / 服務容器
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved