Jan
10
2011

Phong cách lập trình php

phong cach lap trinh trong php

MỖi lập trình viên sau 1 thời gian làm lập trình PHP đều có 1 phong cách viết mã cho riêng mình.
Không thể gò bó 1 phong cách riêng của ai đó rồi quy định bắt ép người khác theo phong cách của mình, điều đó thật khó vì đó là tư duy cũng như thói quen của từng lập trình viên. Tuy vậy đại đa số lập trình viên đều ủng hộ phong cách viết mã sao cho dễ đọc, dễ hiểu.
Sau đây mình xin giới thiệu 1 chuẩn viết mã PHP mà đại đa số các lập trình viên đang dùng(phong cách lập trình PHP mà các lập trình viên nên sử dụng).

Sử dụng Tab trong lập trình PHP

Bạn nên: sử dụng 1 Tab tương ứng 4 spaces, các PHP editor thường măc định như vậy và để cho thuân tiện khi bạn review lại code php của bạn với 1 PHP Editor khác.

Mẫu php cơ bản

<?php
//khoảng cách từ đầu dòng tới dòng mã đầu tiên là 4 spaces
$ok = true;
if ($ok)
{
    echo 'Trả về True';
} else {
    echo 'Trả về False';
}
?>

Thao tác với chuỗi trong PHP

Có nhiều cách xử lý khi nối chuỗi và khai báo biến kèm theo chuỗi và các biến khác.
Bạn nên: tách biệt giữa chuối và biến rõ ràng khi khai báo 1 biến có gồm cả chuỗi và biến.

Mẫu PHP cơ bản

Không nên:

<?php
 $site = 'Php.com.vn';
 //xuất dòng title ra màn hình
 $title = "Chào đón các bạn ghé thăm $site của chúng tôi";
 //hoặc
 $title = "Chào đón các bạn ghé thăm {$site} của chúng tôi";

?>

Bạn nên:

<?php
 $site = 'Php.com.vn';
 //xuất dòng title ra màn hình
 $title = 'Chào đón các bạn ghé thăm ' . $site . ' của chúng tôi';
?>

Lưu ý: trước và sau ký tự “.” dùng nối chuỗi trên luôn có 1 khoảng trắng là 1 space().

Cú pháp viết SQL trong php:

- Dễ đọc và dễ chỉnh sửa
- Viết hoa các từ khóa sql

Mẫu sql trong php:

<?php

$sql = "SELECT id
              ,username
              ,password
              ,email
              ,firstname
              ,lastname
        FROM table
        ORDER BY id DESC
        LIMIT 30";
?>

Lưu ý: các field được viết tách biệt trên từng dòng theo 1 hàng thẳng duy nhất, lí do đơn giản của việc này là dễ đọc, dễ chỉnh sửa:d(đừng ngại viết trên 1 dòng để câu truy vấn của bạn dài và khó xem)

Thao tác với mảng trong PHP

- Mảng chỉ số(Numerically Indexed Arrays)

Với 1 mảng chỉ số mà gồm ít phần tử (dưới 3 phần tử) thì ta nên viết trên 1 dòng nhưng nếu trên 3 thì ta nên xuống dòng và viết tách thành tưng khối một.

Mẫu PHP cơ bản:

<?php
 //mảng có ít phần tử
 $arrayType = array('tao', 'le', 'cam');
 //mảng có nhiều phần tử
 $arrayFood = array(
                     'bun cha', 'bun nem', 'bun cua',
                     'bun dau', 'bun oc', 'bun bo hue',
                     'luon xao xa ot', 'vit quay',
                     );
?>

Lưu ý:theo Mẫu PHP cơ bản trên sau kí tự “(” là xuống dòng để tạo ra 1 khối mảng dễ nhìn nhất cho người đọc, việc thêm 1 lọat các phần tử khác cũng vẫn tạo thành 1 khối.

- Mảng kết hợp(Associative Arrays)(gồm chỉ số và giá trị)

Với 1 mảng kết hợp thì ta nên tách từng chỉ số và giá trị riêng trên từng dòng

$arrayInfo = array('username' => 'phucvh'
                    ,'Age' => 24
                    ,'Facebook' => 'http://facebook.com/phucvh'
                    );

Thao tác với khối lệnh điều khiển trong PHP

Với các khối lệnh điều khiển thì luôn có 1 khoảng trắng la` 1 space trước mở ngoặc đơn và sau khi đóng ngoặc đơn.
Các câu lệnh trong khối lệnh luôn cách đầu dòng 1 khoảng trắng là “1 tab tương ứng 4 space“.

- Với If/Else/Elseif

Mẫu PHP cơ bản:

//Bạn nên

$ok = true;

If ($ok) {
    echo 'OK';
} else {
    echo 'Not OK';
}
//Hoặc nên viết thế này
$ok = true;
If ($ok)
{
    echo 'OK';

} else
{
    echo 'Not OK';
}

Lưu ý: luôn thụt đầu dòng vào 4 spaces sau ký tự “{“(lí do mình nhắc lại vấn đề này là cái này mọi người không để ý và hay quên, bản thân mình cũng đã từng như thế :d)

Với câu lệnh Switch:
Khối lệnh trong Switch luôn cách đầu dòng “1 tab = 4 spaces”.

Mẫu PHP cơ bản:

<?php
Switch ($month)
{
    case 1:
        echo 'January';
        break;
    case 2:
        echo 'February';
        break;
    case 3:
        echo 'March';
        break;
    default:
        break;
}
?>

Lưu ý: break trong khối lệnh trên giúp thoát luôn khỏi khối Switch.

Viết chú thích với các Class và Function

Đặt tên Hàm và tên Biến trong PHP

Đa số phương pháp đang dùng phổ biến là: nếu 1 hàm hoặc 1 biến gồm nhiều từ thì từ đầu tiên các ký tự viết thường, các từ sau viết hoa ký tự đầu tiên.
Xem thêm phần Biến trong PHP

Mẫu cơ bản:

<?php
 public function listCityVietnam()
 {
    $listCityVn = array('Hanoi', 'Tp HCM', 'Hai Phong',
                        'Da Nang', 'Thua Thien Hue', 'Can tho');
    return $listCityVn;
 }
?>

Mình có 1 chia se về việc này là trước kia khi mình mới lập trình, lúc đầu mình viết code chỉ đơn thuần là mình hiểu là được, thứ 2 là viết sao tiết kiêm ít nhất khoảng trắng hoặc xuống dòng, mình nghĩ đơn giản là như thế tiết kiêm được rất nhiều kích cỡ cho 1 file php.

Thời gian đó khi tao 1 function thì mình viết tác giả và ngày tạo ra hàm đó, lúc đó là còn tốt chứ đôi khi hàm nhỏ là bỏ luôn comment.

Sau 1 thời gian khách hàng sử dụng và yêu cầu nâng câp site thì lúc đó sẽ là cả vấn đề, đôi khi chính hàm mình viết mà còn ko nhận ra, viết chi chít code trên cùng dòng thì khi nhìn lại thì cảm giác nhằng nhịt và rối mắt (nản khi ngồi sửa code do chính mình viết ra).

Thêm 1 vấn đề nữa nếu code của bạn thì có khi vẫn nhớ mang máng chỗ nào để sửa(sau khoảng thời gian khoảng 2-3 tháng) còn ngồi sửa code của người khác thì lại là 1 cực hình khác (cái này nói hơi quá :d).

P/s:  Có thể nhiều bạn cho rằng bài viết mang tính chất cá nhân và không phải tổng hợp, vậy nên chúng ta hãy cùng phân tích các mặt chưa được để hoàn thiện nên 1 phong cách viết mã chuẩn  nhất cho ngôn ngữ lập trình PHP. Always welcome join in :D

1 bài viết là không đủ về chủ đề này nhưng đó là những gì cơ bản và tổng quát nhất.

Hãy cùng chia sẻ kinh nghiệm của mình với cộng đồng PHP Viet Nam.

Tài liệu tham khảo:
http://framework.zend.com/manual/en/coding-standard.coding-style.html
http://www.phpro.org/tutorials/PHP-Coding-Style.html
http://vi.wikibooks.org/wiki/Kĩ_năng_viết_mã_PHP

About the Author: phuc vh

Comments are closed.