+1

PHP-CS-Fixer là gì? "Vũ khí" tự động hóa chuẩn hóa code PHP theo chuẩn PSR sạch đẹp

Chào anh em!

Khi làm việc trong một đội ngũ phát triển phần mềm (Team Development) với các dự án PHP/Laravel lớn, một trong những cuộc tranh cãi tốn nhiều nước bọt nhất không phải là logic code khó hay dễ, mà là... cách đặt dấu ngoặc nhọn {} ở đâu, khoảng trắng (whitespace) thế nào, hay nên dùng tab hay khoảng trắng. Người thích theo chuẩn PSR-12, kẻ lại thích tự do phóng khoáng, khiến cho file Git Diff mỗi lần merge code trông như một bãi chiến trường chỉ vì lỗi định dạng.

Để chấm dứt hoàn toàn những cuộc tranh cãi vô bổ đó và ép toàn bộ team đi vào một khuôn khổ chuẩn mực, công cụ PHP-CS-Fixer (PHP Coding Standards Fixer) ra đời như một vị cứu tinh. Hôm nay, hãy cùng mổ xẻ xem công cụ này có gì mà lợi hại đến vậy nhé!

1. PHP-CS-Fixer thực chất là gì?

PHP-CS-Fixer (được phát triển bởi Fabien Potencier - "cha đẻ" của Symfony) là một công cụ dòng lệnh (CLI Tool) cực kỳ mạnh mẽ giúp tự động phân tích và sửa lỗi định dạng mã nguồn PHP theo các tiêu chuẩn quốc tế đã được định hình sẵn (chẳng hạn như PSR-1, PSR-2, PSR-12, hoặc các quy tắc tùy chỉnh riêng của dự án).

Thay vì ngồi thủ công căn chỉnh từng dòng code, xóa khoảng trắng thừa, hay sửa lại dấu ngoặc, bạn chỉ cần gõ một câu lệnh, toàn bộ thư mục source code sẽ được "tắm gội sạch sẽ" và đồng nhất về mặt phong cách ngay lập tức.

2. Tại sao các dự án PHP lớn bắt buộc phải có PHP-CS-Fixer?

A. Thống nhất phong cách code toàn đội ngũ (Consistency)

Dù team của bạn có 5 hay 50 lập trình viên với kinh nghiệm khác nhau, khi chạy qua PHP-CS-Fixer, tất cả các file code đều sẽ tuân theo một quy chuẩn duy nhất. Nhìn vào source code, người ta sẽ có cảm giác nó được viết bởi chỉ một con người duy nhất, giúp việc đọc hiểu và bảo trì code trở nên nhẹ nhàng hơn rất nhiều.

B. Tiết kiệm thời gian tuyệt đối (Automation)

Thay vì bắt anh em code review phải soi mói từng dấu cách thừa hay lỗi xuống dòng, công cụ này có thể được tích hợp thẳng vào quy trình tự động hóa (CI/CD Pipeline) hoặc Git Hook (Husky). Trước khi code được đẩy lên Git, nó sẽ tự động được "ủi phẳng phiu" mà không tốn một giọt mồ hôi.

C. Hỗ trợ hàng trăm quy tắc cấu hình linh hoạt (Rulesets)

PHP-CS-Fixer cung cấp sẵn hàng trăm quy tắc (Rules) tinh chỉnh từ nhỏ đến lớn:

  • Tự động thêm khai báo declare(strict_types=1); vào đầu các file PHP.
  • Chuẩn hóa việc sử dụng nháy đơn (') thay vì nháy kép (") cho các chuỗi không cần biến.
  • Sắp xếp và dọn dẹp các câu lệnh use namespace bị thừa hoặc lộn xộn.
  • Sửa lỗi khoảng trắng ở cuối dòng (Trailing whitespace).

3. Hướng dẫn sử dụng PHP-CS-Fixer trong thực tế

Bước 1: Cài đặt thông qua Composer

Cách nhanh nhất và phổ biến nhất là đưa PHP-CS-Fixer vào dự án thông qua Composer (nên cài đặt dưới dạng dev-dependency):

composer require --dev friendsofphp/php-cs-fixer

Bước 2: Tạo file cấu hình .php-cs-fixer.dist.php

Tại thư mục gốc của dự án, bạn tạo một file cấu hình để định nghĩa các quy tắc muốn áp dụng. Ví dụ áp dụng chuẩn PSR-12 nghiêm ngặt:

<?php

$finder = PhpCsFixer\Finder::create()
    ->in(__DIR__ . '/app')
    ->in(__DIR__ . '/routes')
    ->in(__DIR__ . '/tests');

return (new PhpCsFixer\Config())
    ->setRules([
        '@PSR12' => true,
        'array_syntax' => ['syntax' => 'short'],
        'ordered_imports' => ['sort_algorithm' => 'alpha'],
        'no_unused_imports' => true,
    ])
    ->setFinder($finder);

Bước 3: Chạy lệnh làm sạch code

Khi đã cấu hình xong, bạn chỉ cần mở terminal và gọi lệnh:

vendor/bin/php-cs-fixer fix

Hệ thống sẽ tự động quét qua các thư mục được chỉ định và "phẫu thuật thẩm mỹ" toàn bộ mã nguồn của bạn cho thật chuẩn chỉnh.

Lời kết

PHP-CS-Fixer không chỉ là một công cụ làm đẹp code đơn thuần, nó là một phần không thể thiếu trong văn hóa lập trình chuyên nghiệp của một Backend Developer hiện đại. Đưa PHP-CS-Fixer vào dự án chính là bước đầu tiên để xây dựng những hệ thống Clean Code bền vững, dễ đọc và dễ bảo trì theo thời gian!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí