Chuẩn PSR trong PHP là gì

Như các bạn biết là khi lập trình PHP thì mỗi người có một cách viết code khác nhau cũng như cách đặt tên biến khác nhau, do đó khi làm việc nhóm thì cần phải thống nhất style code với nhau, nếu không thì dự án của bạn sau một thời gian sẽ như đống “SHIT”

Chính vì lẻ đó mà PHP đã ra một tiêu chuẩn về PSR, vậy PSR là gì. Trong bài viết này chúng ta sẽ cùng tìm hiểu chi tiết về PSR để các bạn hiểu rõ hơn về PSR, để hiểu PSR là gì ? Tại sao các lập trình viên cần tuân thủ theo các quy tắc của nó.

PSR là gì?

PSR là viết tắt của PHP Special Request, là những tiêu chuẩn khi code PHP, nó được cộng đồng PHP xây dựng và áp dụng theo.

Trong quá trình làm việc, các hệ thống sử dụng các framework khác nhau ví dụ như Phalcon hay Laravel có thể phải kết hợp với nhau để thực hiện những bài toán cụ thể.

Tuy nhiên đối với mỗi framework của mỗi team lại code theo những chuẩn khác nhau, do đó nảy sinh ra vấn đề là cần có một bộ quy tắc chuẩn để giải quyết việc các code không chuẩn này, và PSR ra đời nhắm chuẩn hóa coding convention cho tất cả các framework, các framework chỉ việc tuân theo các chuẩn này thì các hệ thống framework khác nhau vẫn sẽ dùng chung một quy tắc, do đó sẽ thuận lợi cho việc phát triển sau này.

Thông tin chính thức và chuẩn mực về PSR các bạn có thể tìm thấy tại trang chủ của PSR http://www.php-fig.org/

Hiện tại PSR đã có đủ 7 tiêu chuẩn và vẫn tiếp tục được cập nhật. Trong đó :

Chuẩn PSR-0 nói về autoloading

PSR-0 cung cấp các quy tắc về việc viết các hàm autoload trong PHP, cách sử dụng namespace và kiến trúc thư mục, file để có thể đảm bảo tính nhất quán giữa các project của các developer.

Chuẩn PSR-1 về basic coding, chuẩn PSR-2 về style coding

PSR-1 và PSR-2 cung cấp các quy tắc về cú pháp trong code ví dụ như cách đặt tên hàm, tên biến, class, cấu trúc điều khiển, sử dụng 4 space thay cho 1 tab…

Chuẩn PSR-3 nói về logging

Bất cứ FW nào cần tích hợp chuẩn này thì cần phải có các phương thức như emergency, debug, info, error, etc, hãy xem cụ thể trong Phalcon nào

<!--?php use Phalcon\Logger; use Phalcon\Logger\Adapter\File as FileAdapter; $logger = new FileAdapter("app/logs/test.log"); // These are the different log levels available: $logger->critical(<br ?--> "This is a critical message"
);

$logger->emergency(
"This is an emergency message"
);

$logger->debug(
"This is a debug message"
);

$logger->error(
"This is an error message"
);

$logger->info(
"This is an info message"
);

$logger->notice(
"This is a notice message"
);

$logger->warning(
"This is a warning message"
);

$logger->alert(
"This is an alert message"
);

// You can also use the log() method with a Logger constant:
$logger->log(
"This is another error message",
Logger::ERROR
);

// If no constant is given, DEBUG is assumed.
$logger->log(
"This is a message"
);

// You can also pass context parameters like this
$logger->log(
"This is a {message}",
[
'message' => 'parameter'
]
);

Sau khi bạn test đoạn code trên thì kết quả trong file test.log sẽ như thế này

[Tue, 28 Jul 15 22:09:02 -0500][CRITICAL] This is a critical message
[Tue, 28 Jul 15 22:09:02 -0500][EMERGENCY] This is an emergency message
[Tue, 28 Jul 15 22:09:02 -0500][DEBUG] This is a debug message
[Tue, 28 Jul 15 22:09:02 -0500][ERROR] This is an error message
[Tue, 28 Jul 15 22:09:02 -0500][INFO] This is an info message
[Tue, 28 Jul 15 22:09:02 -0500][NOTICE] This is a notice message
[Tue, 28 Jul 15 22:09:02 -0500][WARNING] This is a warning message
[Tue, 28 Jul 15 22:09:02 -0500][ALERT] This is an alert message
[Tue, 28 Jul 15 22:09:02 -0500][ERROR] This is another error message
[Tue, 28 Jul 15 22:09:02 -0500][DEBUG] This is a message
[Tue, 28 Jul 15 22:09:02 -0500][DEBUG] This is a parameter

Chuẩn PSR-4 nói về autoloading : đây là phần cải tiến của PSR-0

Table dưới đây sẽ demo cho bạn cách dùng nó như thế nào

Fully Qualified Class Name Namespace Prefix Base Directory Resulting File Path
\Acme\Log\Writer\File_Writer Acme\Log\Writer ./acme-log-writer/lib/ ./acme-log-writer/lib/File_Writer.php
\Aura\Web\Response\Status Aura\Web /path/to/aura-web/src/ /path/to/aura-web/src/Response/Status.php
\Symfony\Core\Request Symfony\Core ./vendor/Symfony/Core/ ./vendor/Symfony/Core/Request.php
\Zend\Acl Zend /usr/includes/Zend/ /usr/includes/Zend/Acl.php

Chuẩn PSR-7 nói về HTTP message

Chuẩn này thường dùng cho request và response, ngay lúc này bạn không cần quan tâm nó, dành cho phần nâng cao

Trong số các chuẩn này, theo mình các bạn nên nắm chắc PSR-1 và PSR-2.
Nếu bạn có ý định tự viết FrameWork một framework cho riêng mình thì tìm hiểu PSR-0, PSR-4, PSR-3, ngoài ra có thể đọc thêm PSR-7.

Kết luận

Trên đây tôi đã tóm tắt các chuẩn căn bản của PHP cho bạn có khái niệm cũng như cái nhìn căn bản, để hiểu rõ nó hơn bạn cần có thời gian thực hành nó, ngoài ra bạn cũng có thể đọc bản tiếng anh tại đây để hiểu rõ hơn http://www.php-fig.org

Như mọi khi nếu thấy bài này hãy chia sẽ cho bạn bè của bạn. Thanks:)

This entry was posted in PHP and tagged , .

Leave a Reply

Your email address will not be published. Required fields are marked *