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

PHP 進階技巧:10 個提升代碼質量與性能的實用招式

     編輯:PHP 相關知識

技巧一:IP 地址整數存儲

$ip   = '192.168.1.100';
$long = ip2long($ip);           // 3232235876
$ip2  = long2ip($long);         // '192.168.1.100'

// 數據庫存 BIGINT UNSIGNED,索引極快,範圍查詢簡單
// WHERE ip_long BETWEEN ip2long('192.168.1.0') AND ip2long('192.168.1.255')

節省 75% 存儲空間(15 字節 char → 4 字節 int),加速排序/篩選。

技巧二:checkdnsrr() 驗證郵箱域名

function isEmailDeliverable(string $email): bool {
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) return false;
    $domain = explode('@', $email)[1];
    return checkdnsrr($domain, 'MX');
}

比單純正則更接近真實可投遞性。

技巧三:mysqli/PDO 預處理語句

$stmt = $pdo->prepare('SELECT * FROM users WHERE email = ? AND status = 1');
$stmt->execute([$email]);
$user = $stmt->fetch();
```
- 徹底防 SQL 注入
- 重複執行時服務端緩存执行計劃,提升 20%-30% 性能

技巧四:三元運算符優化簡單邏輯

$status = $user->isActive() ? 'active' : 'inactive';
$page   = $_GET['p'] ?? 1;          // PHP 7+ null 合併運算符
$limit  = min(max((int)$_GET['limit'], 1), 100);

代碼緊湊、可讀性強,避免冗長 if/else。

技巖五:善用 PEAR/Composer 包避免重複造輪子

  • 日期處理:`nesbot/carbon`
  • 集合操作:`illuminate/collections` 或 `tightenco/collect`
  • 驗證器:`respect/validation`
  • 文件系統:`league/flysystem`
  • HTTP 客戶端:`guzzlehttp/guzzle`

Composer 生態成熟,優先搜索現成方案。

技巧六:highlight_file() 即時生成高亮代碼頁

<?php
// show_source.php
$file = __DIR__ . '/' . basename($_GET['file'] ?? '');
if (is_file($file) && pathinfo($file, PATHINFO_EXTENSION) === 'php') {
    highlight_file($file); // 自動輸出帶行號高亮 HTML
} else {
    http_response_code(404);
    echo 'File not found';
}

調試、代碼分享、文檔生成極其方便。**注意過濾敏感文件路徑**。

技巧七:error_reporting(0) 生產環境屏蔽錯誤輸出

<?php
// 入口文件第一行
error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT);
ini_set('display_errors', '0');
ini_set('log_errors', '1');
ini_set('error_log', __DIR__ . '/../logs/php_errors.log');

防止 SQL、路徑、堆棧信息洩露給用戶,統一寫入日誌供運維分析。

技巧八:gzcompress()/gzuncompress() 壓縮大文本存入 BLOB

$bigText = str_repeat('Lorem ipsum ', 10000); // ~120KB
$compressed = gzcompress($bigText, 9);        // ~90% 壓縮比
// 存入 BLOB/TEXT 字段
$restored = gzuncompress($compressed);

適用于日志、文章全文、JSON 配置等大字段,節省 90% 存儲。**全文搜索場景除外**。

技巧九:引用傳遞實現多返回值

function stats(array $data, int &$sum, float &$avg, int &$max): void {
    $sum = array_sum($data);
    $avg = $sum / count($data);
    $max = max($data);
}

$numbers = [3, 7, 2, 9, 5];
stats($numbers, $sum, $avg, $max);
// $sum=26, $avg=5.2, $max=9

避免返回嵌套數組,語義清晰。PHP 8.1+ 也可用 `#[ReturnTypeWillChange]` 屬性或直接返回對象/數組。

技巧十:深度理解魔術引號與 SQL 注入本質

  • `magic_quotes_gpc` 已在 PHP 5.4 **完全移除**,舊代碼依賴它極其危險。
  • SQL 注入本質:**數據與代碼未分離**。唯一根治:**預處理語句**(參數化查詢)。
  • 任何手動 `addslashes`/`mysql_real_escape_string` 都屬于「修補」,非「治本」。

總結

這 10 招涵蓋**存儲優化、驗證增強、安全防護、性能調優、代碼簡化、生態利用、調試工具、錯誤控制、壓縮存儲、多返回值**——掌握它們,即可從「寫出能跑的代碼」進階到「寫出健壯、高效、可維護的專業代碼」。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved