12/08/2018, 11:07

PHP CODING STANDARD

Một coding standard tốt hết sức quan trọng cho bất kỳ một dự án nào, nhất là đối với các project nhiều người. Coding standard góp một phần lớn tron việc đảm bảo chất lượng source code, ít lỗi và dễ bảo trì, sửa chữa. I. FILE FORMATTING PHP Tags PHP code phải sử dụng tag đầy đủ ...

Một coding standard tốt hết sức quan trọng cho bất kỳ một dự án nào, nhất là đối với các project nhiều người.

Coding standard góp một phần lớn tron việc đảm bảo chất lượng source code, ít lỗi và dễ bảo trì, sửa chữa.

I. FILE FORMATTING

PHP Tags

  • PHP code phải sử dụng tag đầy đủ <?php ?> (Không nên dùng tag <? ?> hoặc short-echo <?= ?> tags)

  • Trong một file chỉ bao gồm code PHP thì không được viết tag đóng ?>.

1. Canh lề - Indenting

Code không dùng tab, mà phải sử dụng 4 dấu cách làm indent.

2. Lines

Việc giới hạn số ký tự trên 1 dòng code nhằm giúp cho lập trình viên nhìn code được dễ dàng. Một dòng code nên chỉ có 80 ký tự và tối đa là 120 ký tự.

3. Namespace và tên Class

Namespaces và tên classes phải tuân theo quy chuẩn "autoloading" của PSR

Điều này có nghĩa là mỗi class phải được viết vào một file, và phải có ý nhất 1 level trong namespace.

  • Tên class phải được viết dưới dạng StudlyCaps.

  • Chữ cái đầu tiên viết hoa, các từ được kết hợp bởi chữ cái la tinh viết liền nhau. Được phân biệt với nhau bằng chữ viết hoa.

Code với phiên bản PHP 5.3 trở lên phải dùng đúng namespaces.

<?php
// PHP 5.3 and later:
namespace VendorModel;

class Foo
{
}

Code với phiên bản 5.2.x trở xuống nên dùng pseudo-namespace với Vendor_ là prefix.

<?php
// PHP 5.2.x and earlier:
class Vendor_Model_Foo
{
}

II. Class Constants, Properties, và Methods

Constants

Constants của class phải được viết hoa toàn bộ và sử dụng gạch dưới ngăn cách giữa các từ. Ví dụ:

<?php
namespace VendorModel;

class Foo
{
    const VERSION = '1.0';
    const DATE_APPROVED = '27/08/2015';
}

Properties

Bộ quy tắc này không đưa ra quy định hay gợi ý về việc nên viết properties như thế nào, theo dạng StudlyCaps,StudlyCaps, StudlyCaps,camelCase, hay $$nder_score. Dù sử dụng quy tắc đặt tên nào đi chăng nữa thì nó cần phải được thực hiện thống nhất trong một vendor, package, class, method ..

<?php
namespace VendorPackage;

class ClassName
{
    public $foo = null;
}
  • Tên property không nên được prefix bởi dấu gạch dưới _ để biểu thị tính protected hay private.

Method

Tên Method phải được viết dưới dạng camelCase.

  • Các method phải được khai báo với các từ : privated, protected, public. Không được bỏ trống

  • Static method phải được khai báo với theo độ ưu tiên của visibility trong script

public    static foo() { ... }
private   static bar() { ... }
protected static goo() { ... }
public function functionName()
{
    return $this->varName;
}

Hàm, method và sử dụng

Tham số của hàm phải được cách bởi 1 kí tự khoảng trắng . Ví dụ sau gọi hàm 3 tham số

getContent(1, 2, 3);

Nếu muốn truyền tham trị, thì phải đặt & ở trước biến trong hần khai báo hàm , không được khi sử dùng hàm mới thêm dấu & .

Câu lệnh điều khiển

If/ Else/ Elseif

  • Các câu điều kiện phải có 1 khoảng trắng ở giữa từ “if”, “elseif” và ngoặc mở “(“ . Thêm 1 khoảng trắng nữa giữa ngoặc đóng “)” và ngoặc cong “{“.

  • Ở trong ngoặc đơn “()”, giữa 2 bên của các toán tử so sánh phải có khoảng trắng để dễ đọc .

  • Ngoặc cong mở “{“ phải viết chung hàng với lệnh if . Ngoặc cong đóng phải ở hàng của riêng nó

// hợp lệ
if ($a != 2){
    $a = 2;
}
// Không hợp lệ
if ($a != 2)
{
    $a = 2;}
  • Với những lệnh if mà có thêm else, elseif thì phải tuân theo ví dụ sau
if ($a != $b) {
    $a = 1;
} else {
   $a = 2;
}

Switch

  • Tương tự, giữa chữ “switch” và ngoặc mở “(“ phải có 1 khoảng trắng, và giữa ngoặc đóng “)” và “{“ phải có 1 khoảng trắng nữa .

  • Ngoặc cong mở “{“ phải nằm chung hàng với if , và ngoặc cong đóng “}” phải nằm ở hàng của riêng nó

  • Tất cả các nội dung bên trog switch phải được thục dòng 4 khoảng trắng . Và nội dung của mỗi “case” phải được thục dòng thêm 4 khoảng trắng nữa !

switch ($numPeople) {
    case 1:
        break;

    case 2:
        break;

    default:
        break;
}

while, do while

Một câu lệnh while được viết như sau. Hãy chú ý vào vị trí của dấu ngoặc đơn, khoảng trắng và dấu ngoặc nhọn.

<?php
while ($expr) {
    // structure body
}

Tương tự như vậy, một câu lệnh do while được viết như sau. Hãy chú ý vào vị trí của dấu ngoặc đơn, khoảng trắng và dấu ngoặc nhọn.

<?php
do {
    // structure body;
} while ($expr);

for

Một câu lệnh for được viết như sau. Hãy chú ý vào vị trí của dấu ngoặc đơn, khoảng trắng và dấu ngoặc nhọn.

<?php
for ($i = 0; $i < 10; $i++) {
    // for body
}

** foreach**

Một câu lệnh foreach được viết như sau. Hãy chú ý vào vị trí của dấu ngoặc đơn, khoảng trắng và dấu ngoặc nhọn.

<?php
foreach ($iterable as $key => $value) {
    // foreach body
}

try, catch

<?php
try {
    // try body
} catch (FirstExceptionType $e) {
    // catch body
} catch (OtherExceptionType $e) {
    // catch body
}

Một block try catch được viết như sau. Hãy chú ý vào vị trí của dấu ngoặc đơn, khoảng trắng và dấu ngoặc nhọn.

Inline Documentation

Files:

Trong mỗi file chứa PHP code, chúng ta phải có 1 block ở trên đầu file để miêu tả về file . Bạn có thể làm như sau :

/**
 * Short description for file
 *
 * Long description for file (if any)...
 *
 * LICENSE: Some license information
 *
 * @copyright  2006 Zend Technologies
 * @license    [url]http://www.zend.com/license/3_0.txt[/url]   PHP License 3.0
 * @version    $Id$
 * @link       [url]http://dev.zend.com/package/PackageName[/url]
 * @since      File available since Release 1.2.0
 */

Classes

Tương tự như vậy, các class cũng cần phải có

/**
 * Short description for class
 *
 * Long description for class (if any)...
 *
 * @copyright  2006 Zend Technologies
 * @license    [url]http://www.zend.com/license/3_0.txt[/url]   PHP License 3.0
 * @version    Release: @package_version@
 * @link       [url]http://dev.zend.com/package/PackageName[/url]
 * @since      Class available since Release 1.2.0
 */

Functions

Với mỗi hàm, bao gồm cả các hàm dc định nghĩa trong class, cần có 1 block gồm:

Miêu tả cơ bản về hàm

  • Tất cả các biến của hàm
  • Tất ca các giá trị trả về của hàm
  • Nếu 1 hàm hay 1 method trong class có “throw exception” thì dùng @throw
/**
 * Does something interesting
 *
 * @param  Place    $where  Where something interesting takes place
 * @param  integer  $repeat How many times something interesting should happen
 * @throws Some_Exception_Class If something interesting cannot happen
 * @return Status
 */
public function doSomethingInteresting(Place $where, $repeat = 1)
{
    // implementation...
}

Require và include

Include, include_once, require, require_once hok nên dùng () .

 Hợp lệ
 include 'header.php';
 Không hợp lệ
 include ('header.php');

Các tài liệu tham khảo

http://www.php-fig.org/psr/psr-1/

http://phpdoc.org/

0