Hướng dẫn này kế thừa và mở rộng thêm cho Psr - 1 : Tiêu chuẩn cơ bản khi viết code.
Tổng quan về trình bày code PHP
- Code
PHẢI
tuân thủ PSR-1 - Code
PHẢI
sử dụng 4 ký tự space để lùi khối (không dùng tab) -
KHÔNG PHẢI
cố định chiều dài của dòng code; dòng codePHẢI
dưới 120 ký tự;NÊN
dưới hoặc bằng 80 ký tự. PHẢI
có một dòng trắng sau khai báo namespace, vàPHẢI
có một dòng trắng sau mỗi khối code.-
Ký tự mở { khai báo lớp
PHẢI
ở dòng tiếp theo, và đóng }PHẢI
ở dòng tiếp theo sau thân class. - Ký tự { cho hàm
PHẢI
ở dòng tiếp theo, và ký tự } kết thúc hàmPHẢI
ở dòng tiếp theo của thân hàm. -
Các visibility (public, private, protected)
PHẢI
được khai báo cho tất cả các hàm và các thuộc tính của lớp; abstract và finalPHẢI
được khai báo trước visibility.static
phải khai báo sauvisibility
- Các từ khóa điều khiển khối (if, elseif, else)
PHẢI
có một khoảng trống sau chúng; gọi hàm, phương thức thìKHÔNG ĐƯỢC
làm như vậy. - Mở khối { cho cấu trúc điều khiển
PHẢI
trên cùng một dòng; và đóng khối này } với ở dòng tiếp theo của thân khối. - Hằng số
true
,false
,null
PHẢI
viết với chữ thường. - Từ khóa
extends
vàimplements
phải cùng dòng vớiclass
. - implements nhiều lớp, thì mỗi lớp trên một dòng
- keyword
var
KHÔNG ĐƯỢC
dùng sử dụng khai báo property. - Tên property KHÔNG NÊN có tiền tố _ nhằm thể hiện thuộc protect hay private.
- Tham số cho hàm, phương thức: KHÔNG được thêm space vào trước dấu
,
vàPHẢI
có một space sau,
. Các tham sốCÓ THỂ
trên nhiều dòng, nếu làm như vậy thìPHẢI
mỗi dòng 1 tham số. abstract
,final
PHẢI đứng trướcvisibility
, cònstatic
phải đi sau.
Ví dụ trình bày code
<?php namespace Vendor\Package; use FooInterface; use BarClass as Bar; use OtherVendor\OtherPackage\BazClass; class Foo extends Bar implements FooInterface { public function sampleFunction($a, $b = null) { if ($a === $b) { bar(); } elseif ($a > $b) { $foo->bar($arg1); } else { BazClass::bar($arg2, $arg3); } } final public static function bar() { // method body } }
<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
// ... additional PHP code ...
<?php
namespace Vendor\Package;
use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;
class ClassName extends ParentClass implements
\ArrayAccess,
\Countable,
\Serializable
{
// constants, properties, methods
}
Gọi phương thức và hàm
Khi gọi một hàm hay phương thức của lớp, KHÔNG ĐƯỢC
có khoảng trắng giữa phương thức, hàm và toán tử và dấu (
đồng thời không được có khoảng trắng sau (
. không có khoảng trắng trước ), như phần trên không được có khoảng trắng trước ,
nhưng PHẢI
có khoảng trắng sau ,
.
<?php bar(); $foo->bar($arg1); Foo::bar($arg2, $arg3);
<?php $foo->bar( $longArgument, $longerArgument, $muchLongerArgument );
IF, ELSE, SWITCH, CASE
<?php
if ($expr1) {
// if body
} elseif ($expr2) {
// elseif body
} else {
// else body;
}
<?php
switch ($expr) {
case 0:
echo 'First case, with a break';
break;
case 1:
echo 'Second case, which falls through';
// no break
case 2:
case 3:
case 4:
echo 'Third case, return instead of break';
return;
default:
echo 'Default case';
break;
}
WHILE
<?php
while ($expr) {
// structure body
}
FOR
<?php for ($i = 0; $i < 10; $i++) { // for body }
<?php foreach ($iterable as $key => $value) { // foreach body }
TRY,CATCH
<?php
try {
// try body
} catch (FirstExceptionType $e) {
// catch body
} catch (OtherExceptionType $e) {
// catch body
}
Trình bày Closure
<?php
$closureWithArgs = function ($arg1, $arg2) {
// body
};
$closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) {
// body
};
Lời kết cho PSR-2
Có nhiều thành phần cần thực hành để trình bày code PHP như hướng dẫn, nếu ngay từ đầu học PHP bạn tuân thủ nó, nó trở thành thói quen và không còn gò bó nữa, ngược lại tạo cho bạn thói quen viết code đúng chuẩn, dễ đọc, đẹp. Vậy, ngay từ bây giờ hãy lưu tâm đến PSR-2 khi gõ các dòng code PHP nhé.