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ưngKHÔ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 require
và include
,
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().