TIÊU CHUẨN PSR (Bài trước)

PRS-1 là các nguyên tắc mỗi lập trình viên PHP nên theo để đảm bảo code dễ đọc, bảo trì, và dễ sử dụng lại cũng như chia sẻ.

1. Nguyên tắc chung nhất khi code PHP

  • Các file code PHẢI sử dụng thẻ <?php hoặc <?=
  • File code PHP PHẢI sử dụng encode: UTF-8 without BOOM
  • Các file NÊN chứa các khai báo (lớp, hàm, hằng ...) hoặc các tác dụng phụ (thiết lập, xuất dữ liệu chung ...) nhưng KHÔNG NÊN chứa cả hai
  • Các Namespace và lớp (class) PHẢI theo chuẩn "autoloading" PSR: [PSR-0 và PSR-4]
  • Tên lớp PHẢI có dạng NameClass (không nameclass, Nameclass, namClass ...) (Viết hoa ký tự đầu tiên của từ ví dụ tên các lớp: ClientBuilder, NodeAttrs, ConnectionFactory ...)
  • Hằng số trong class tất cả PHẢI viết HOA và chia ra bởi dấu _ (ví dụ ES_TEST_HOST).
  • Tên phương thức của lớp PHẢI ở dạng camelCase (từ đầu viết thường, ví dụ: helloWorld).

Các file PHP

Các thẻ PHP

Mã PHP PHẢI sử dụng kiểu mở thẻ đầy đủ để nhúng mã <?php ?>, hoặc short-echo <?= ?> xuất dữ liệu trong HTML. Không được sử dụng các loại thẻ khác như thẻ ngắn

Hiệu ứng phụ

Một file CÓ THỂ khai báo ra các thành phần mới (các lớp, hàm, hằng ...) và không dẫn đến các hiệu ứng phụ hoặc file đó CÓ THỂ thi hành các tác vụ logic dẫn đến hiệu ứng phụ, nhưng trong một file không nên chứa cả hai điều trên.

Hiệu ứng phụ có nghĩa là thực hiện một logic (tác vụ) mà nó chẳng liên quan đến các lớp, hàm, hằng ... hay chỉ thực hiện việc gộp file

Hiệu ứng phụ gồm xuất dữ liệu chung, sử dụng tường minh lệnh requireinclude, kết nối đến dịch vụ ngoài, sửa đổi thiết lập ini, thiết lập cách hiện thị lỗi và ngoại lệ, thay đổi các biến toàn cục, biến tĩnh, đọc và ghi file ...

Ví dụ sau trong một file vừa tạo ra hàm mới vừa chứa các hiệu ứng phụ, nên tránh điều này

<?php
// Thay đổi php.ini - hiệu ứng phụ
ini_set('error_reporting', E_ALL);

// Nạp file.php - hiệu ứng phụ
include "file.php";

// Xuất dữ liệu chung - hiệu ứng phụ
echo "<html>\n";

// Khai báo hàm
function foo()
{

}

Còn file sau chứa khai báo mà không có hiệu ứng phụ nào

<?php
// Khai báo hàm
function foo()
{
    // function body
}

// Lệnh kiểm tra điều kiện để khai báo không coi là hiệu ứng phụ của file
if (! function_exists('bar')) {
    function bar()
    {
        // function body
    }
}

Các Namespace và tên Class

Namespace và Lớp PHẢI theo chuẩn "autoloading" PSR: [PSR-0, PSR-4]. 

Có nghĩa là mỗi lớp được khai báo trên mỗi file PHP riêng và namespace tối thiểu có một cấp, cấp đầu là tên vendor.

Tên lớp lại PHẢI đúng dạng NameClass.

Ví dụ đúng chuẩn của 1 file:

<?php
namespace Vendor\Model;

class Foo
{
}

Hằng, Thuộc tính và Phương thức của lớp

Hằng theo chuẩn ở trên, tất cả PHẢI viết hoa, phân cách từ bởi _

Ví dụ hằng đúng chuẩn:

<?php
namespace Vendor\Model;

class Foo
{
    const VERSION = '1.0';
    const DATE_APPROVED = '2012-06-01';
}

Thuộc tính tùy cách sử dụng viết dạng $StudlyCaps dạng $camelCase hay $under_score, chỉ yêu cầu thống nhất về cách sử dụng trong phạm vi package, lớp, phương thức

Phương thức thì đặt tên theo dạng camelCase().


Đăng ký nhận bài viết mới
TIÊU CHUẨN PSR (Bài trước)