Table of Contents

Coding convention

Coding convention là gì?

Coding convention là tập hợp những quy ước cụ thể khi viết code mà lập trình viên cần tuân theo. Việc tuân thủ những quy ước này sẽ giúp code dễ đọc, dễ quản lý.bảo trì, nâng cấp.

Tùy công ty sẽ có những quy chuẩn coding convention khác nhau nhưng hầu hết sẽ dựa trên các chuẩn phổ biến trên thế giới.

PHP có một chuẩn viết code là PSR. PSR là viết tắt của từ PHP Standards Recommendation. Hiện tại thì có 5 chuẩn từ PSR-0 đến PSR-4 và 2 chuẩn phổ biến nhất đó là PSR1 và PSR2:

Quy tắc đặt tên (Naming Convention)

Các cú pháp thông dụng

Cú pháp lạc đà (camelCase)

Cú pháp: Ký tự đầu tiên của từ đầu tiên viết thường, những ký tự đầu tiên của những từ tiếp theo viết hoa.

Ví dụ: productName, productPrice, thisIsTheNameFollowTheCamelCase

Cú pháp Pascal (PascalCase)

Cú pháp: viết hoa chữ cái đầu tiên của mỗi từ.

Ví dụ: ProductName, ProductPrice, ThisIsTheNameFollowThePascalCase

Cú pháp con rắn (snake_case)

Cú pháp: Tất cả các chữ cái đều viết thường, và các từ cách nhau bởi dấu gạch dưới. Ví dụ: product_name, product_price, this_is_the_name_follow_the_snake_case

Tuỳ vào mỗi ngôn ngữ lập trình và cộng đồng định nghĩa, ta sẽ lựa chọn cú pháp phù hợp.

Một số nguyên tắc đặt tên

Quy tắc về số lượng

Số lượng dòng code trong hàm/lớp, số lượng hàm trong lớp, số lượng lớp trong gói phải giữ ở một giới hạn nhất định, và nên giữ càng ít càng tốt.

Quy tắc xuống hàng

Một số quy tắc khác

Chuẩn PSR-1 : Các chuẩn cơ bản

Đây là các chuẩn dùng để viết code, có một vài quy tắc đơn giản như sau:

Chuẩn PSR-2: Chuẩn viết code

Code sniffer

PHP Code Sniffer là gì?

PHP Code Sniffer (hay còn gọi là phpcs) là một cộng cụ phục vụ lập trình viên trong việc check các coding convention.

PHP Code Sniffer bao gồm 2 tập lệnh PHP:

Đây là 1 công cụ phát triển thiết yếu để đảm bảo mã của bạn sạch sẽ, tuân thủ các coding convention mà bạn không phải mất thời gian rà soát lại code để check.

Cài đặt

Package: https://packagist.org/packages/squizlabs/php_codesniffer

Sử dụng:

$ ./vendor/bin/phpcs -i
The installed coding standards are PEAR, Zend, PSR2, MySource, Squiz, PSR1 and PSR12
$ ./vendor/bin/phpcs -h
$ ./vendor/bin/phpcbf -h

Sử dụng

Chuẩn PEAR là chuẩn mặc định mà PHP Code Sniffer dùng để kiểm tra.

Kiểm tra 1 file có tuân thủ chuẩn PEAR hay không:

$ ./vendor/bin/phpcs src/Commands/ModuleMakeCommand.php
FILE: /Sources/Packages/laravel-module/src/Commands/ModuleMakeCommand.php
--------------------------------------------------------------------------------------------------------------------
FOUND 57 ERRORS AND 27 WARNINGS AFFECTING 79 LINES
--------------------------------------------------------------------------------------------------------------------
   2 | ERROR   | [ ] Missing file doc comment
  11 | ERROR   | [x] There must be exactly one blank line before the tags in a doc comment
  12 | ERROR   | [ ] Missing @category tag in class comment
  12 | ERROR   | [ ] Missing @author tag in class comment
  12 | ERROR   | [ ] Missing @license tag in class comment
  12 | ERROR   | [ ] Missing @link tag in class comment

Kiểm tra toàn bộ thư mục:

TungNT:laravel-module tungnt$ sudo ./vendor/bin/phpcs src/
 
FILE: /Sources/Packages/laravel-module/src/Stubs/configs/example.stub.php
-------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
-------------------------------------------------------------------------
 2 | ERROR | Missing file doc comment
-------------------------------------------------------------------------

Kiểm tra theo chuẩn khác, sử dụng –standard. Ví dụ:

TungNT:laravel-module tungnt$ sudo ./vendor/bin/phpcs --standard=PSR2 src/
 
FILE: /Sources/Packages/laravel-module/src/Stubs/configs/example.stub.php
-------------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
-------------------------------------------------------------------------
 5 | ERROR | [x] Expected 1 newline at end of file; 0 found
-------------------------------------------------------------------------
PHPCBF CAN FIX THE 1 MARKED SNIFF VIOLATIONS AUTOMATICALLY
-------------------------------------------------------------------------

Tự động sửa các vi phạm Theo chuẩn:

$ ./vendor/bin/phpcbf --standard=PSR2 src/
 
PHPCBF RESULT SUMMARY
--------------------------------------------------------------------------------------------
FILE                                                                        FIXED  REMAINING
--------------------------------------------------------------------------------------------
/Sources/Packages/laravel-module/src/Stubs/configs/example.stub.php         1      0
/Sources/Packages/laravel-module/src/ModuleGeneratorServiceProvider.php     3      0
--------------------------------------------------------------------------------------------
A TOTAL OF 4 ERRORS WERE FIXED IN 2 FILES
--------------------------------------------------------------------------------------------
 
Time: 129ms; Memory: 6MB
 
$ vendor/bin/phpcs --standard=ruleset.xml tests/
 
FILE: /Sources/Packages/codesniffer/tests/helpers.php
-----------------------------------------------------------------------
FOUND 0 ERRORS AND 3 WARNINGS AFFECTING 3 LINES
-----------------------------------------------------------------------
 10 | WARNING | Line longer than 80 characters; contains 94 characters
 21 | WARNING | Line longer than 80 characters; contains 99 characters
 32 | WARNING | Line longer than 80 characters; contains 90 characters
-----------------------------------------------------------------------
 
Time: 103ms; Memory: 6MB
$ vendor/bin/phpcs --standard=src/Standards/OneSite/ tests/

Config Standars:

TungNT:codesniffer tungnt$ vendor/bin/phpcs --standard=OneSite tests/
ERROR: the "OneSite" coding standard is not installed. The installed coding standards are PEAR, Zend, PSR2, MySource, Squiz, PSR1 and PSR12
TungNT:codesniffer tungnt$ sudo ./vendor/bin/phpcs --config-show
Password:
Using config file: /Sources/Packages/codesniffer/vendor/squizlabs/php_codesniffer/CodeSniffer.conf

TungNT:codesniffer tungnt$ sudo ./vendor/bin/phpcs --config-set installed_paths src/Standards/OneSite/
Using config file: /Sources/Packages/codesniffer/vendor/squizlabs/php_codesniffer/CodeSniffer.conf

Config value "installed_paths" added successfully
TungNT:codesniffer tungnt$ sudo ./vendor/bin/phpcs --config-show
Using config file: /Sources/Packages/codesniffer/vendor/squizlabs/php_codesniffer/CodeSniffer.conf

installed_paths: src/Standards/OneSite/
TungNT:codesniffer tungnt$ cat /Sources/Packages/codesniffer/vendor/squizlabs/php_codesniffer/CodeSniffer.conf
<?php
 $phpCodeSnifferConfig = array (
  'installed_paths' => 'src/Standards/OneSite/',
)
?>TungNT:codesniffer tungnt$ vendor/bin/phpcs -i
The installed coding standards are PEAR, Zend, PSR2, MySource, Squiz, PSR1, PSR12 and OneSite
TungNT:codesniffer tungnt$ sudo ./vendor/bin/phpcs --config-delete src/Standards/OneSite/
TungNT:codesniffer tungnt$ ./vendor/bin/phpcs --standard=OneSite tests/

FILE: /Sources/Packages/codesniffer/tests/helpers.inc
-----------------------------------------------------------------------
FOUND 2 ERRORS AFFECTING 2 LINES
-----------------------------------------------------------------------
  8 | ERROR | Variable "_suffix" must not contain a leading underscore
 10 | ERROR | Variable "_suffix" must not contain a leading underscore
-----------------------------------------------------------------------

Time: 72ms; Memory: 6MB