PHP 的歷史包袱和現代面貌
PHP 從 CGI 時代(1994)就開始被用,到 2005 年之前,它是「把 HTML 和邏輯混在一起寫」的代表:
<!-- 2005 年前常見的 PHP 寫法 -->
<html>
<?php
$result = mysql_query("SELECT * FROM users WHERE id = " . $_GET['id']); // SQL injection 風險
while ($row = mysql_fetch_array($result)) {
echo "<p>" . $row['name'] . "</p>";
}
?>
</html>這種寫法讓 PHP 在工程師社群裡長期有「不夠嚴肅」的形象。
但 PHP 7.x(2015)到 PHP 8.x(2020+)帶來了型別系統、JIT compiler、attribute(類似 Java annotation)、nullable type、match expression——現代 PHP 的語言能力已經和 Python、Ruby 沒有量級差距。Laravel 和 Symfony 的出現,讓 PHP 後端在大型系統的架構能力上完全站得住腳。
Laravel:「最愉快的 PHP 後端體驗」
Laravel(2011)的設計目標是讓 PHP 後端「簡單卻不失強大」。Taylor Otwell 把 Ruby on Rails 的 Convention over Configuration 精神帶進 PHP,但加了更完整的生態:
// Laravel 的 Eloquent ORM — 比 ActiveRecord 更明確
class User extends Model
{
protected $fillable = ['name', 'email'];
public function posts(): HasMany
{
return $this->hasMany(Post::class);
}
}
// Controller — MVC 結構清楚
class UserController extends Controller
{
public function show(int $id): JsonResponse
{
$user = User::with('posts')->findOrFail($id);
return response()->json($user);
}
}
// Route — 宣告式
Route::get('/users/{id}', [UserController::class, 'show'])->middleware('auth');Laravel 的生態廣度幾乎無敵:
- Eloquent:ORM,語法比 Hibernate 簡潔很多
- Artisan:CLI 工具,
php artisan make:model/make:controller/make:migration一行搞定 - Blade:template engine,全端 server-side rendering
- Queue / Horizon:Job queue,Redis 管理介面
- Laravel Sail:開發環境的 Docker 封裝
- Filament:Admin panel,比 Django Admin 功能更豐富
- Livewire:Server-side rendering with reactivity(類似 Phoenix LiveView)
- Reverb:官方 WebSocket server
Laravel 的缺點:
- PHP 本身是 FPM(FastCGI Process Manager)驅動——每個請求是一個獨立的 PHP process,沒有持久化 process,所以連線池、singleton 的概念和 Node.js / Python 不同
- FPM 模式的效能上限比 Node.js / Go 低(每個請求 fork 的 overhead)
- Swoole / RoadRunner 可以讓 PHP 跑在持久化 process 裡,解 FPM 的效能問題,但學習成本和部署複雜度增加
適合:全功能 web 應用(特別是需要後台管理介面);PHP 為主的團隊;快速 MVP;proto proto2661047/b2e/rails 有類似設計模式的參考。
Symfony:組件化設計的典範
Symfony(2005)的定位和 Laravel 不同——它更像是「一組高品質的 PHP 組件」,而不是一個整合好的框架:
// Symfony 的 Controller
class UserController extends AbstractController
{
#[Route('/users/{id}', name: 'user_show', methods: ['GET'])]
public function show(int $id, UserRepository $userRepo): JsonResponse
{
$user = $userRepo->find($id) ?? throw $this->createNotFoundException();
return $this->json($user);
}
}Symfony 的特別之處是:Laravel 本身的很多組件就是基於 Symfony 的(HTTP foundation、Console、Event Dispatcher)。在 PHP 生態裡,Symfony 是基礎建設層,Laravel 是在上面加的 DX 層。
Symfony 的強項:
- 設計非常嚴謹,適合大型複雜系統
- DI container(Symfony DI)是 PHP 生態裡最強的
- Doctrine ORM 比 Eloquent 更適合複雜的 domain model(Data Mapper vs Active Record)
適合:大型企業系統;需要嚴謹架構的場景;已經有 Symfony 技術棧的團隊。
Slim:PHP 的 Express 對應版
Slim(2011)是 PHP 生態的 minimal framework——只給你路由和 middleware,其他都自己來:
$app = AppFactory::create();
$app->addBodyParsingMiddleware();
$app->get('/users/{id}', function (Request $request, Response $response, array $args) {
$id = $args['id'];
$data = ['id' => $id, 'name' => 'Alice'];
$response->getBody()->write(json_encode($data));
return $response->withHeader('Content-Type', 'application/json');
});
$app->run();Slim 遵守 PSR-7(HTTP message interface)和 PSR-15(middleware),和 PHP 生態的標準完全相容。
適合:API microservice;不需要全套 MVC;需要 PHP 但不想要 Laravel / Symfony 的重量。
選擇決策
需要完整的 web 應用(含後台管理、ORM、Queue、全端)?
→ Laravel
大型企業系統、嚴謹架構、複雜 domain model?
→ Symfony
Minimal API 或 microservice?
→ Slim
需要突破 FPM 效能限制?
→ Laravel / Slim + Swoole 或 RoadRunner
PHP 在 2026 的定位已經和 2005 年完全不同。Laravel 特別在「開箱就有完整生態」這個維度上,是所有語言的框架裡數一數二的選擇——前提是你願意接受 PHP 和 FPM 的限制。
