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ẢItuân thủ PSR-1 - Code
PHẢIsử dụng 4 ký tự space để lùi khối (không dùng tab) -
KHÔNG PHẢIcố định chiều dài của dòng code; dòng codePHẢIdưới 120 ký tự;NÊNdưới hoặc bằng 80 ký tự. PHẢIcó một dòng trắng sau khai báo namespace, vàPHẢIcó 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.staticphải khai báo sauvisibility - Các từ khóa điều khiển khối (if, elseif, else)
PHẢIcó một khoảng trống sau chúng; gọi hàm, phương thức thìKHÔNG ĐƯỢClàm như vậy. - Mở khối { cho cấu trúc điều khiển
PHẢItrê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,nullPHẢIviết với chữ thường. - Từ khóa
extendsvàimplementsphải cùng dòng vớiclass. - implements nhiều lớp, thì mỗi lớp trên một dòng
- keyword
varKHÔNG ĐƯỢCdù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ẢIcó 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ẢImỗi dòng 1 tham số. abstract,finalPHẢI đứng trướcvisibility, cònstaticphả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é.
