PHP - Code Style Guide: PSR-1
Bài đăng này đã không được cập nhật trong 7 năm
Tài nguyên PHP rất lớn và đa dạng, bao gồm vô số thư viện, framework và các component. Việc các nhà phát triểu lựa chọn một vài thành phần trong số này để xây dựng nên một dự án là điều phổ biến. Trong đó, việc viết code PHP tuân thủ một quy tắc chung giúp cho các nhà phát triển có thể dễ dàng kết hợp các thư viện khác nhau cho dự án của họ. Đội ngũ PHP Framework Interop Group đã đề xuất và thông qua một loạt các khuyến nghị quy tắc. Không phải tất cả đều liên quan đến style code , những quy tắc viết code được đề cập trong những tiêu chuẩn PSR-0, PSR-1, PSR-2, PSR-3, PSR-4. Những đề xuất này chỉ là một bộ quy tắc mà nhiều dự án như Drupal, Zend, Symfony, Laravel, CakePHP, phpBB, AWS SDK, FuelPHP, Lithium ... đang được áp dụng. Bạn có thể áp dụng chúng cho dự án của riêng bạn hoặc tiếp tực sử dụng phong cách cá nhân của riêng bạn Tuy nhiên, tốt nhất là bạn nên viết PHP tuân thủ theo một tiêu chuẩn đã được xây dựng. Đó có thể là sự kết hợp của một số quy tắc của PSR hoặc một trong các tiêu chuẩn được thực hiện bởi PEAR, Symfony hoặc Zend. Điều này giúp cho các nhà phát triển khác có thể dễ dàng đọc và làm việc với code của bạn, và các dự án có sử dụng các thành phần phự thuộc có thể có thể có sự nhất quán ngay cả khi làm việc với các gói của bên thứ 3.
PSR 1: Tiêu Chuẩn Viết Code Cơ Bản
Phần này của tiêu chuẩn bao gồm các thành phần code tiêu chuẩn, được yêu cầu để đảm bảo khả năng tương tác kĩ thuật cao giữa các code PHP được chia sẻ
Tổng quan
- Các file CẦN chỉ sử dụng thẻ mở
<?php
hoặc<?=
. - Các file CẦN chỉ mã hóa UTF-8 cho code PHP.
- Các file NÊN chỉ nên làm hoặc là khai báo class, function, constant ... hoặc chứa các cài đặt thay đổi câu hình .ini tuy nhiên không nên viết trong cùng một nơi.
- Namespace và class CẦN theo một chuẩn "autoload" PSR (PSR-0, PSR-4).
- Tên các Class CẦN được khai báo theo kiểu
StudlyCaps
. - Các constant của Class CẦN được khai báo với tất cả bằng chữ hoa và phân tách giữa các từ bằng dấu gạch chân (vd:
HTTP_STATUS
). - Phương thức CẦN được khai báo theo kiểu
camelCase
.
Files
- Thẻ PHP Code PHP CẦN sử dụng thẻ dài <?php ?> hoặc thẻ rút gọn <?= ?>; nó không nên sử dụng các thẻ khác.
- Kiểu mã hóa Code PHP CẦN chỉ sử dụng UTF-8
- Side Effects
Một file chỉ NÊN khai báo class, function, constant .. và không gây ra side-effects.
Cụm từ "side-effect" có nghĩa là thực hiện các logic không liên quan trực tiếp đến việc khai báo các class, function, constant...
"Side-effect" bao gồm nhưng không giới hạn: tạo ra các kết quả đầu ra, sử dụng
require
hoặcinclude
, kết nối với các dịch vụ ngoài, chỉnh sửa cài đặt .ini, phát ra lỗi hoặc ngoại lệ, chỉnh sửa biến global hoặc static, đọc hoặc viết từ một file, v.v. Dưới đây là một ví dụ về một file có cả khai báo thông thường và side-effect
<?php
// side effect: thay đổi cài đặt ini
ini_set('error_reporting', E_ALL);
// side effect: tải một file
include "file.php";
// side effect: tạo xuất ra
echo "<html>\n";
// declaration
function foo()
{
// Thân function
}
Dưới đây là một ví dụ về một file khai báo thông thường không có side-effect
<?php
// declaration
function foo()
{
// function body
}
// conditional declaration is *not* a side effect
if (! function_exists('bar')) {
function bar()
{
// function body
}
}
Namespace Và Tên Class
Namespace và class CẦN theo một chuẩn "autoloading" PSR: (PSR-0 hoặc PSR-4)
Nghĩa là mỗi một class được khai báo trong một file, và nó nằm trong một namespace có ít nhất một cấp: cấp cao nhất là tên nhà cung cấp (vendor).
Tên class CẦN được khai báo theo kiểu StudlyCaps
.
Code được viết cho PHP 5.3 và mới hơn phải sử dụng không gian tên chính thức.
Ví dụ:
<?php
// PHP 5.3 and later:
namespace Vendor\Model;
class Foo
{
}
Code được viết cho PHP 5.2.x và trước NÊN sử dụng tắc đặt giả tên là Vendor_ các tiền tố trên tên lớp. Ví dụ:
<?php
// PHP 5.2.x and earlier:
class Vendor_Model_Foo
{
}
Hằng Số, Thuộc Tính Và Phương Thức
Thuật ngữ "class" trong phần này đề cập tới tất cả class, interface và trait
- Hằng số Các hằng số class phải được khai báo tất cả trong chữ hoa với phân cách các từ bằng dấu gạch chân. Ví dụ:
<?php
namespace Vendor\Model;
class Foo
{
const VERSION = '1.0';
const DATE_APPROVED = '2012-06-01';
}
- Thuộc tính
Hướn dẫn này cố ý tránh bất cứ đề nghị liên quan đến việc sử dụng
$StudlyCaps
,$camelCase
hoặc$under_score
cho tên thuộc tính. Bất cứ quy ước đặt tên nào được sử dụng NÊN được áp dụng nhất quán trong phạm vi hợp lý. Phạm vi đó có thể là mức độ nhà cung cấp, múc độ gói, mức độ class hoặc cấp độ method - Phương thức
Tên các phương thức phải được khai báo theo kiểu
camelCase()
Tham khảo và dịch từ:
All rights reserved