20
PHPVietnam Coding Standards Chuẩn phong cách viết mã PHPVietnam là một nỗ lực thống nhất phong cách viết mã cho các lập trình viên thuộc nhóm PHPVietnam. Nó là một ràng buộc về các quy tắc viết mã PHP mà các lập trình viên của nhóm PHPVietnam cần tuân thủ nhằm mục đích tạo sự thống nhất chung giữa các đoạn mã dễ theo dõi, sử dụng lại, phát hiện lỗi, bảo trì và kế thừa chương trình. Việc tuân thủ quy ước này sẽ giúp duy trì được khả năng làm việc nhóm và khả năng kế thừa lại của người đi sau. Chuẩn phong cách viết mã này được dùng như một tài liệu tham khảo như các tài liệu kĩ thuật khác. Các quy tắc của Chuẩn: Nên: không bắt buộc Phải: bắt buộc Có thể: giới thiệu giải pháp, khuyến cáo (không bắt buộc) Lịch sử: 19/7/2008: Một số quy tắc đặt tên biến đã thay đổi do trải nghiệm từ việc nghiên cứu các framework Zend, Symfony cũng như kinh nghiệm từ việc viết PONE framework và áp dụng nó vào các dự án tại WVB. Ngoài ra chuẩn này cũng được sửa đổi để phù hợp với sự ra mắt của PHP 5.3 trong tháng 9/2008 tới 6/2/2007: Quy định cách khai báo câu truy vấn SQL trong code PHP. 10/10/2006: Chuẩn hóa cách đặt tên class và id trong CSS. 15/6/2006: Chuẩn hóa cách viết SQL. 28/5/2006: Chuẩn hóa cách khai báo mảng và khai báo lược đồ dữ liệu

Php vietnam coding standards

  • Upload
    google

  • View
    84

  • Download
    4

Embed Size (px)

DESCRIPTION

TÀI LIỆU MÔN MÃ NGUỒN MỞ

Citation preview

Page 1: Php vietnam coding standards

PHPVietnam Coding Standards 

Chuẩn phong cách viết mã PHPVietnam là một nỗ lực thống nhất phong cách viết mã cho các lập trình viên thuộc nhóm PHPVietnam. Nó là một ràng buộc về các quy tắc viết mã PHP mà các lập trình viên của nhóm PHPVietnam cần tuân thủ nhằm mục đích tạo sự thống nhất chung giữa các đoạn mã dễ theo dõi, sử dụng lại, phát hiện lỗi, bảo trì và kế thừa chương trình. Việc tuân thủ quy ước này sẽ giúp duy trì được khả năng làm việc nhóm và khả năng kế thừa lại của người đi sau.

Chuẩn phong cách viết mã này được dùng như một tài liệu tham khảo như các tài liệu kĩ thuật khác.

Các quy tắc của Chuẩn:

Nên: không bắt buộc Phải: bắt buộc Có thể: giới thiệu giải pháp, khuyến cáo (không bắt buộc)

Lịch sử:

19/7/2008: Một số quy tắc đặt tên biến đã thay đổi do trải nghiệm từ việc nghiên cứu các framework Zend, Symfony cũng như kinh nghiệm từ việc viết PONE framework và áp dụng nó vào các dự án tại WVB. Ngoài ra chuẩn này cũng được sửa đổi để phù hợp với sự ra mắt của PHP 5.3 trong tháng 9/2008 tới

6/2/2007: Quy định cách khai báo câu truy vấn SQL trong code PHP. 10/10/2006: Chuẩn hóa cách đặt tên class và id trong CSS. 15/6/2006: Chuẩn hóa cách viết SQL. 28/5/2006: Chuẩn hóa cách khai báo mảng và khai báo lược đồ dữ liệu 14/4/2006: Chuẩn viết mã PHP chuyển về GooglePages. Đây sẽ là nơi lưu trữ bản

PHPVietnam Coding Standard cập nhật nhất. 13/1/2006: Rút chuẩn viết mã PHP khỏi Wikipedia và nó trở thành một chuẩn

riêng của nhóm PHPVietnam 14/9/2004: công bố bản đầu tiên trên Wikipedia tiếng Việt 14/9/2004: Chuẩn viết mã này được đề xuất năm 2004 bởi pcdinh

Last updated: 19/7/2008

Giới thiệu

Tại sao cần có quy ước viết mã

Các quy ước viết mã có ý nghĩa quan trọng đối với các lập trình viên vì một số lý do:

Page 2: Php vietnam coding standards

80% trong tổng số chi phí duy trì một gói phần mềm phát sinh trong giai đoạn bảo trì.

Hầu như không có bất cứ một phần mềm nào được bảo trì trong suốt cả thời gian tồn tại của nó bằng chính tác giả đầu tiên của nó.

Các quy ước viết mã nâng cao tính dễ theo dõi của phần mềm, cho phép các kĩ sư hiểu được các dòng mã mới nhanh hơn và sâu sắc hơn.

Một mã nguồn được đưa ra thị trường như là một sản phẩm cần phải được đảm bảo là nó được đóng góp chuẩn và gọn ghẽ như bất cứ sản phẩm nào khác.

Để các quy ước này có hiệu lực, tất cả những ai tham gia viết phần mềm thuộc nhóm PHPVietnam đều phải tuân thủ theo các quy ước viết mã chung.

Kế thừa và đóng góp

Tài liệu này phản ánh các tiêu chuẩn viết mã trong ngôn ngữ lập trình PHP được tổng hợp từ các tài liệu về Quy ước viết mã trong PEAR, Java do Sun Microsystems và PHP Team cung cấp. Nhóm PHPVietnam kế thừa và chọn lọc các điểm phù hợp với nhóm vào thời điểm lựa chọn.

Tên file

Phần mở rộng của tập tin

Các tệp tin chứa các đoạn mã PHP đều phải có phần mở rộng là .php. Các cách đặt đuôi file như .inc ở Drupal là bad practice và cần tuyệt đối loại bỏ trừ khi có các quy định khác trong framework và phải có cơ chế bảo vệ tệp tin đáng tin cậy. Các tệp tin chứa định nghĩa lớp khi không dùng thư viện lớp hay framework nào nên có phần mở rộng là .class.php, các tệp tin chứa định nghĩa các interface thuần túy nên có phần mở rộng là .interface.php và các tệp tin chứa mã templates thì nên có phần mở rộng là .tpl.php

Cách đặt tên file

Các tên file thường gặp trong các ứng dụng PHP

Đối với tất cả các tên file, chuẩn này khuyến cáo chỉ dùng các kí tự alphanumeric characters, dấu gạch dưới và dấu gạch ngang ("-"). Tuyệt đối không dùng các khoảng trắng. Tên file tốt hơn nên dùng tiếng Anh và có ý nghĩa gợi tả nội dung file.

Cách đặt tên file chứa lớp

Tất cả các tập tin chứa các lớp (bao gồm cả các thư viện của framework) nên có tên file trùng lớp tên lớp. Khi làm việc với một lớp độc lập khỏi framework hoặc định nghĩa một file lớp riêng lẻ giữa các file scripting thì tên file tên có phần mở rộng là .class.php. Tuy nhiên, không nên áp dụng cách này khi viết một framework hoặc tệp tin chứa lớp đó

Page 3: Php vietnam coding standards

đã nằm trong thư mục có tên là classes. Khi lập trình hay cố gắng đưa phần thư viện vào thư mục hay namespace riêng nhằm tránh gây hiểu nhầm và dễ quản lý hơn

Ví dụ: Action.class.php

Cách tổ chức file

Bố cục nội dung trong file

Dữ liệu mô tả đầu file và lớp

Tất cả các file mã nguồn nên có một khối dữ liệu mô tả ở cấp trang ở ngày đầu file và một khối dữ liệu mô tả ở cấp lớp nằm ngày trên phần mã cho mỗi lớp. Phần này nên viết bằng tiếng Anh. Ví dụ:

<?php /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */ /** * Short description for file * * Long description for file (if any)... * * PHP versions 4 and 5 * * LICENSE: This source file is subject to version 3.0 of the PHP license * that is available through the world-wide-web at the following URI: * http://www.php.net/license/3_0.txt. If you did not receive a copy of * the PHP License and are unable to obtain it through the web, please * send a note to [email protected] so we can mail you a copy immediately. * * @category CategoryName * @package PackageName * @author Original Author <[email protected]> * @author Another Author <[email protected]> * @copyright 1997-2004 The PHP Group * @license http://www.php.net/license/3_0.txt PHP License * @version CVS: $Id:$ * @link http://pear.php.net/package/PackageName * @see NetOther, Net_Sample::Net_Sample() * @since File available since Release 1.2.0 * @deprecated File deprecated in Release 2.0.0 */ // Place includes, constant defines and $_GLOBAL settings here.<br /> /** * Short description for class * * Long description for class (if any)... * * @author Original Author <[email protected]> * @author Another Author <[email protected]> * @copyright 1997-2004 The PHP Group

Page 4: Php vietnam coding standards

* @license http://www.php.net/license/3_0.txt PHP License * @version Release: @package_version@ * @link http://pear.php.net/package/PackageName * @see NetOther, Net_Sample::Net_Sample() * @since Class available since Release 1.2.0 * @deprecated Class deprecated in Release 2.0.0 */ class MyClassName { } ?>

Thẻ đánh dấu mã PHP

Mã PHP nên được đánh dấu bằng cặp thẻ <?php và ?>. Chỉ được loại bỏ thẻ kết thúc ?> trong trường hợp không kiểm soát được vấn đề header_sent. Các hình thức khác như <? và ?> hay <% và %>không được khuyến cáo.

Cách thụt lùi dòng và chiều dài của dòng

Phần mã nằm trong khối điều khiển nên được thụt lùi 4 khoảng trắng so với hàng chứa điều khiển vòng gần nhất. Ví dụ:

<?phpif ($index > 0) {(4 space)$index = $index + 1; (4 space)if ($index > 72) (4 space){(4 space)(4 space)Validator::parse($index); (4 space)(4 space)break;         } } ?>

Chú thích mã

Nên chú thích mã như thế nào. Áp dụng các thẻ meta (param) như thế nào. Áp dụng /* và */ cùng với // như thế nào. (to be updated)

Định dạng file

Phần này tuân thủ các nguyên tắc sau:

Định dạng file là dạng văn bản UTF-8 Sử dụng mã hóa kí tự UTF-8 Được định dạng cho Unix "Định dạng theo Unix" nghĩa là:

Page 5: Php vietnam coding standards

o Các dòng phải được kết thúc chỉ với một kí hiệu line feed (LF). Các kí hiệu bắt đầu hàng mới như vậy được được biểu diễn như là các kí hiệu hệ thập phân (10), hệ bát phân (012) và hệ thập lục phân (0A) thông thường. Không dùng các kí hiệu về đầu hàng carriage returns (CR) như các máy Macintosh hay kết hợp carriage return/line feed (CR/LF) như các máy Windows.

o Nên có một line feed sau thẻ PHP đóng (?>). Điều đó có nghĩa là khi con trỏ ở tận cùng của file, thì nó nên có một hàng bên dưới thẻ PHP đóng.

Quy ước đặt tên biến, hằng, hàm, phương thức, lớp

Khai báo

Khai báo và khởi tạo biến

Biến toàn cục

Chuẩn này khuyến cáo hạn chế tối đa dùng các biến toàn cục với từ khóa sửa đổi global.

Biến thông thường

Tên biến nên bắt đầu bằng chữ viết thường. Tên biến nên là danh từ có ý nghĩa mô tả nó chứa cái gì hay nó làm nhiệm vụ gì. Nếu biến gồm có nhiều từ thì ghép các từ đó lại: từ đầu tiên viết thường, từ thứ hai và thứ ba viết hoa chữ cái đầu tiên. Tuyệt nhiên không dùng dấu gạch dưới trong tên biến. Ví dụ:

somePrivateProperty counter counter_for_this (Không khuyến cáo)

Các cái tên như "foo" và "tmp" nên tránh dùng vì nó không mô tả cái gì cả. Tên biến không nên chứa các con số. Các con số nên được mô tả bằng các chữ cái trừ khi có lý do thiết thực để không làm như vậy.

Tuyệt đối không dùng Hungarian notation để đặt tên cho biến vì nó là dấu hiệu của abstraction leaks, code smells và overloaded code blocks. Ví dụ cách đặt dưới đây là không khuyến cáo.

$m_myVariable $arrColors $iCounter

Cách đặt mong muốn:

$valueOne

Page 6: Php vietnam coding standards

$_colors $_processesLevelTwo

Tên lớp, khai báo lớp và giao diện

Chú thích cho lớp

Trước khi khai báo lớp, lập trình viên nên thực hiện chú thích cho lớp. Chú thích nên viết bằng tiếng Anh để các công cụ sinh tài liệu tự động có thể đọc được chuẩn theo nguyên gốc. PHP6 có thể cải tiến hỗ trợ Unicode cho nên quy tắc sử dụng ngôn ngữ có thể thay đổi. Dù vậy, nếu mã nguồn là mở cho cộng đồng thế giới, tiếng Anh vẫn là sự lựa chọn tốt hơn.

Ví dụ:

/** * A class that allows services to be globally registered, so that they * can be accessed by any class that needs them. Also allows Mock Objects * to be easily used as replacements for classes during testing. * * @package Max * @author Luis Correa d'Almeida <[email protected]> * @author Andrew Hill <[email protected]> */

hoặc

/** * Utility class for common functions. * * @package Zend * @copyright Copyright (c) 2005-2006 Zend Technologies USA Inc. (http://www.zend.com) * @license http://www.zend.com/license/framework/1_0.txt Zend Framework License version 1.0 */

Các thẻ @xxx nên đặt theo các thẻ chuẩn của PHPDocumentor.

Đặt tên lớp

Tên lớp nên là một danh từ mô tả, xác định rõ lớp đó nó là cái gì. Tránh dùng từ viết tắt. Tên lớp nên bắt đầu bằng từ viết hoa. Khi áp dụng kĩ thuật hướng đối tượng để viết mã thì cần chú ý tên lớp cũng nên phản ảnh cây phân cấp lớp, mỗi bậc của cây phân cấp được cách nhau thông qua một dấu gạch dưới. Điều này là để tránh xung đột tên lớp giữa các gói (lớp đặt trong các thư mục) vì với PHP 4.x và PHP 5.x, tên một lớp phải là duy nhất trong toàn bộ mẫu của PHP Parser. Nếu không làm theo nguyên tắc này, bạn sẽ gặp

Page 7: Php vietnam coding standards

lỗi Fatal error: Cannot redeclare class post in C:\phpvietnam\www\MyCart\app\plugins\blog\models\post.php on line 13. Quy tắc này được đặt ra do namespace chưa được thực hiện trong PHP4, PHP5. PHP6 có thể sẽ làm thay đổi điều này.Ví dụ:

Log Net_Finger HTML_Upload_Error

Trong một số trường hợp, người lập trình có thể đặt lớp Email nằm trong file Email.class.php và file này nằm trong thư mục Validator, khi đó lớp Email sẽ có tên là Validator_Email.

Định nghĩa hàm và gọi hàm

Tên gọi của hàm

Trong PHP, khái niệm hàm và phương thức thay thế được cho nhau. Chúng ta gọi khái niệm hàm cho lập trình thủ tục và dùng khái niệm phương thức khi lập trình hướng đối tượng.

Hàm và phương thức đều chỉ mặt hoạt động, thao tác, vì vậy tên chúng nên gọi tả hành động tương ứng.

Hàm và phương thức nên được đặt tên theo quy tắc "studly caps" (còn được gọi là "bumpy case" hay "camel caps"). Chữ cái đầu tiên của tên (sau tiền tố) nên viết thường, và mỗi một chữ bắt đầu một từ mới sẽ viết hoa. Ví dụ:

connect() getData() buildSomeWidget()

Các thành viên lớp dạng private (nghĩa là thành viên đó được tạo ra chỉ nhằm để tiếp xúc với bên trong lớp mà chúng được khai báo mà thôi) thì được bắt đầu bằng một dấu gạch dưới. Ví dụ:

_sort() _initTree() $this->_status

Quy tắc tương tương tự cũng sẽ áp dụng cho các thành viên lớp có điều khiển truy cập là protected. Ví dụ:

protected $_somevar protected function _initTree()

Page 8: Php vietnam coding standards

Lý do để áp dụng cách làm này là PHP sẽ không bao giờ hỗ trợ method overloading cho nên cần tiết kiệm các tên gọi trong khai báo lớp. Vì biến hay method protected và private sẽ chiếm dụng số lượng tên mà public API có thể có cho nên cách tốt nhất là dùng _ để giảm khả năng này.

Định nghĩa hàm

PHP là một ngôn ngữ curly braces cho nên sự có mặt của { và } là hết sức quan trọng trong việc xác định các block mã. Theo chuẩn này, lập trình viên được khuyến cáo đặt { và } trên các hàng riêng rẽ. Nên tránh đặt dấu ngoặc nhòn mở {  trên cùng dòng với khai báo method hay class hay các language contruct khác như if, while ... bởi vì khi khai báo này quá dài, nó sẽ làm hạn chế lợi ích của việc sử dụng tính năng curly matching có trong các IDE hiện đại.

<?php function fooFunction($arg1, $arg2 = '') { if (condition) { statement; } return $val; } ?>

Các đối số có giá trị mặc định được đặt ở cuối danh sách đối số. Cố gắng trả lại một giá trị có nghĩa từ một hàm, nếu có giá trị thích hợp. Ví dụ:

<?php function connect(&$dsn, $persistent = false) { if (is_array($dsn)) { $dsninfo = &$dsn; } else { $dsninfo = DB::parseDSN($dsn); }

if (!$dsninfo || !$dsninfo['phptype']) { return $this->raiseError(); } return true; } ?>

Lời gọi hàm, phương thức

Page 9: Php vietnam coding standards

Khi gọi hàm, không nên dùng dấu cách giữa tên hàm, ngoặc đơn mở, và tham số thứ nhất; nên dùng một dấu cách giữa dấu phẩy và tham số, và không dùng dấu cách giữa tham số cuối cùng, dấu ngoặc đơn đóng và dấu chấm phẩy. Ví dụ:

<?php $var = getMessage($bar, $baz, $quux); ?>

Như thấy ở trên, nên để một dấu cách ở hai bên dấu bằng dùng đến gán giá trị trả lại của một hàm vào một biến. Trong trường hợp viết nhiều phép gán có liên quan thì có thể dùng thêm nhiều dấu cách để làm tăng thêm tính dễ đọc:

<?php $short = foo($bar); $longVariable = foo($baz); ?>

Lời gọi phương thức tuân theo những quy tắc cũng tương tự như lời gọi hàm. Phương thức là thuật ngữ dùng để chỉ hàm khai báo bên trong các lớp. Chuẩn này khuyến cáo không dùng dấu cách để tách phần dấu ngoặc đơn với đối số đặt ở giữa cặp ngoặc đơn này. Sau đây là ví dụ để bạn phân biệt cách gọi nào là hợp chuẩn:

// Khuyến cáo theo Chuẩn này $object->method($a); $array[10] = 'foo';

// Không khuyến cáo $object->method( $a ); $array[ 10 ] = 'foo';

Khai báo hằng

Các hằng phải luôn viết tất cả dưới dạng chữ hoa, dùng gạch dưới để tách các từ. Phần tên hằng làm tiền tố thì dùng tên chữ hoa của lớp hoặc gói mà chúng ta định dùng chúng trong đó. Ví dụ, các hằng dùng trong gói DB:: tất cả đều bắt đầu bằng DB_.

Xin chú ý: Các hằng true, false và null là những trường hợp đặc biệt không bị chi phối bởi quy ước viết hoa này cho nên luôn viết chúng ra dưới dạng chữ thường.

Đặt tên cho mảng và chỉ mục mảng

Trong PHP, mảng là một cấu trúc ngôn ngữ. Việc đặt tên cho mảng tuân thủ nguyên tắc đặt tên cho biến. Cặp ngoặc tròn dùng cho mảng phải đặt sát cạnh khai báo array. Chỉ mục mảng đầu tiên đặt sát với ngoặc tròn mở đầu. Các chỉ mục tiếp theo đặt cách một khoảng trắng so với dấu phẩy. Chỉ mục cuối cùng đặt nằm sát với dấu ngoặc tròn đóng mảng. Chỉ mục mảng được đặt tên theo danh từ hoặc dùng số nếu là mảng kết hợp. Chỉ

Page 10: Php vietnam coding standards

mục mảng phải đặt viết thường. Nếu chỉ mục mảng gồm nhiều từ thì dùng dấu gạch dưới để cách cách từ. Nguyên tắc này phải phù hợp với nguyên tắc đặt tên cho bảng và tên cột. Khi khai báo mảng gồm cả cặp khóa và giá trị thì toán tử liên kết (=>) phải cách dấu trích đơn kết thúc khóa một khoảng trắng và cách dấu trích đơn mở đầu giá trị (nếu giá trị là chuỗi) hoặc giá trị đó (nếu giá trị là số hay hằng hoặc biến) một khoảng trắng.

// Khuyến cáo theo Chuẩn này $anArrayOfData = array(); $listOfNews = array('one', 'two', 'three'); $listOfNews = array('one_table', 'two_apples', 'three_clocks'); $listOfNews = array('one_table' => $table, 1 => DB_ERROR, 'three_clocks' => 2);

// Không khuyến cáo $anArryOfData = array (); $listOfNews = array( 'one', 'two', 'three' ); $anArryOfData = array( ); $listOfNews = array('one', 'two','three');

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

Câu lệnh đơn giản

Lệnh tổ hợp

Lênh return

Lệnh điều kiện và cấu trúc điều khiển

Cấu trúc điều khiển trong PHP bao gồm có if, for, while, switch, foreach.

Các cấu trúc điều khiển nên dùng một khoảng trống giữa từ khóa điều khiển và ngoặc đơn mở, để phân biệt chúng với lời gọi hàm.

Nên dùng các ngoặc nhọn ngay cả trong các tình huống chúng chỉ được xem là các tùy chọn kĩ thuật. Các dấu ngoặc nhọn sẽ làm cho mã dễ đọc hơn và làm giảm khả năng xảy ra các lỗi logic khi viết thêm các dòng mã mới.

Lệnh if/else

Dưới đây là cách dùng hàm if/else tuân thủ quy ước chung. Chú ý: luôn dùng các ngoặc nhọn { } để bao các câu lệnh của if chứ không được bỏ. Luôn có dấu cách giữa 2 đầu của dấu =, ==, ===, >, < khi so sánh hay gán

Chuẩn này cũng khuyến cáo không dùng else nếu bạn đã trả lại giá trị với return hoặc đã dùng break; bên trong khối.

Page 11: Php vietnam coding standards

<?php if ((condition1) || (condition2)) { action1(); } elseif ((condition3) && (condition4)) { action2(); } else { defaultAction(); } ?>

Như thế này là tồi.

<?php if ((condition1) || (condition2)) action1; ?>

Lệnh for

for ($i = 0; $i < 100; $i++) { if (!$x) { break; }

if ($x < 10) { statement;

statement; break; } ...... }

Xin lưu ý, việc dùng các biến ngắn như trên không được khuyến cáo. Các biến dùng trong for nên có các cái tên gợi tả ý nghĩa như $counter hay $index

Lệnh while

while ($data = getData($requestId)) {    $menu  .= '<option value="'.$data['id'].'"';    $menu   .= ($data[ 'id'] == $_GET['id'] ? ' selected>' :'>');    $menu   .= $data[ 'name'].'</option>';}

Page 12: Php vietnam coding standards

Lệnh do-while

do {    echo 'It is PHPVietnam compliant';} while ($error == 0);

Lệnh switch

Chú ý không dùng return trong từng case

<?phpswitch (condition) { case 1: action1(); break;

case 2: action2(); break;

default: defaultAction(); break;}?>

Lệnh try-catch

try { // Get rotation length field and convert to integer. $rotLength = Integer::parseInt($rotationLengthField->getText()->trim()); .... } catch(Exception $ex) { // Report the exception to the user. ErrorHandler::log($ex, "Invalid rotation length: "); }

Làm việc với SQL và cơ sở dữ liệu (database)

Đặt tên cho bảng

Cách đặt tên bảng và column tuân thủ theo chuẩn ISO-11179, mô tả trong cuốn book "SQL Programming Style" của Joe Celko. Tên bảng là danh từ số nhiều viết thường

Page 13: Php vietnam coding standards

bằng tiếng Anh. Tên bảng có thể đặt bằng danh từ không đếm được. Nếu tên bảng gồm nhiều từ kết hợp thì dùng dấu gạch dưới để tách các từ. Tuy nhiên, rất hạn chế dùng dấu cách để tách các từ như thế này, tên bảng nên là một từ đơn.

Ví dụ:

1. news2. employees, approved_patents;

Đặt tên cho cột

Tên cột là danh từ số ít hoặc tính từ, viết thường. Nếu tên cột gồm nhiều từ kết hợp thì dùng dấu gạch dưới để tách các từ. Điều này phù hợp với nguyên tắc đặt tên cho các chỉ mục mảng.

Viết câu lệnh SQL

Các câu lệnh SQL sẽ được viết hoa những từ, mệnh đề là từ khóa được bảo lưu. Tên bảng, tên cột, alias sẽ được viết thường theo quy tắc trên.

Ví dụ:

SELECT SUM(sales.units_sold)FROM sales, customer, time, store, productWHERE sales.customer_id = customer.customer_id AND sales.date_id = time.date_id AND sales.store_id = store.store_id AND sales.product_id = product.product_id AND time.year_id = 2006 AND product.category_id = "tv"GROUP BY product.brand, store.country_iso_id

Khi khai báo các câu SQL trong mã PHP, không khuyến cáo dùng dấu (+) để kết hợp các câu truy vấn nằm trên nhiều hàng. PHP là một ngôn ngữ multiline, không giống như Java, và việc làm như vậy sẽ khiến tốc độ xử lý chậm và khó đọc. Ngoài ra nó còn làm giảm các rủi ro gặp lỗi khi làm việc trên SQL Server do SQL Server có thể báo lỗi câu SQL là không hợp lệ khi trước và sau câu truy vấn không có dấu cách.

Ví dụ:

Không khuyến cáo

$sql = "SELECT" ." first_name," ." last_name" .

Page 14: Php vietnam coding standards

" FROM employee" ." WHERE city = 'London'";

Khuyến cáo

$sql = " SELECT first_name, last_name FROM employee WHERE city = 'London'";

Làm việc với CSS

Cách đặt tên cho class và id trong CSS

Khi tên class và id gồm 2 từ trở lên thì dùng dấu gạch ngang (-) để ngăn cách chúng. Tránh dùng dấu gạch dưới (_): http://developer.mozilla.org/en/docs/Underscores_in_class_and_ID_Names. Một cách khác là dùng camelCase để đặt tên.

Ví dụ:

div#controlPanel p.introductionText

Tên lớp và id nên viết toàn bộ là chữ thường nếu như không dùng camelCase. Chú ý là trong CSS, tên của class và id là phân biệt chữ hoa chữ thường.

Kinh nghiệm lập trình

Phần này nói về các kinh nghiệm sử dụng các từ khóa điều khiển truy cập.

Cách dùng include_once() và require_once()

include_once() được khuyến cáo dùng khi bạn sử dụng một thư viện bên ngoài nhưng sự tồn tại của nó không gây ảnh hưởng dẫn đến sự gián đoạn của chương trình. Những tài nguyên gây gián đoạn chương trình có thể kể đến như các bộ lọc bảo mật, kết nối cơ sở dữ liệu, lời gọi dịch vụ web... Khi đó bạn nên dùng require_once vì khi nó không load được tài nguyên sẽ dẫn đến lỗi fatal error làm ngừng ứng dụng.

Cú pháp của require_once và include_once khai báo như sau

require_once 'fileName.class.php'; include_once 'fileName.class.php';

Page 15: Php vietnam coding standards

Không dùng () để bao tên file.

Kinh nghiệm tối ưu hóa tốc độ xử lý chuỗi

(to be updated)

Tránh và hạn chế đến mức tối đa dùng các biến toàn cục

(to be updated)

Dùng single quotes và double quotes

Nên luôn dùng single quote (') để bao các chuỗi không chứa biến. Nếu chuỗi có chứa biến thì dùng double quote (").

Khi nào dùng mảng và khi nào dùng hằng

(to be updated)

Khi nào sử dụng tham chiếu và biến cục bộ

(to be updated)

ORM: ActiveRecord, Table Gateway và performance

(to be updated)

Tối ưu hóa PHP cho các ứng dụng high traffic

(to be updated)

PHP Security: 25 checklist để viết 1 ứng dụng PHP có khả năng bảo mật cao với các hình thức tấn công ở mức ứng dụng

(to be updated)

Chuẩn hóa hay phi chuẩn hóa database: khi nào sách giáo khoa lại thất bại trong môi trường sản xuất

(to be updated)

Lựa chọn MyISAM, Falcon, SolidDb và InnoDB: Đánh giá các vấn đề lock và overhead trên transaction

(to be updated)

Page 16: Php vietnam coding standards

Kết hợp các kĩ thuật xử lý database cao cấp trong MySQL với PHP để xây dựng các site có traffic cực lớn. 

(to be updated)

Liên kết bên ngoài

Quy ước viết mã Java:

Java Coding Style Guide theo Sun Java Programming Style Guide theo JavaRanch Java Programming Style Guidelines

Các bài viết liên quan:

PHP Coding Style and Organization