Viết code PHP thật dễ thương !

Bên cạnh các khuyến cáo, bắt buộc mà chúng ta thường gặp phải ở bất kỳ ngôn ngữ theo C style nào khác như vị trí của các dấu {}, dấu () trong tên hàm … thì cũng có những chuẩn riêng đặc thù của PHP. Có khá nhiều chuẩn viết code PHP được biết đến, ví dụ như chuẩn của Zend, chuẩn của phpBB, chuẩn của PEAR. Các chuẩn này ban đầu được đưa ra bởi các dự án, nhóm, công ty và được áp dụng bởi phần còn lại của thế giới. Nhóm PHPVietnam cũng có một chuẩn riêng cho mình do pcdinh viết.

Vấn đề thứ nhất là cách đặt tên biến và tên hàm, ở PHP có 2 cách được dùng phổ biến là đặt theo camelCase và under_score. Chuẩn của phpBB bắt buộc dùng under_score. Viết thường toàn bộ tên biến và phân cách các từ bằng ký tự “_” (ký tự under_score) ví dụ:

$hottest_girl = get_girl(‘Paris Hilton’);

Các chuẩn của Zend, PEAR, PHPVietnam thì thích dùng camelCase, họ học hỏi điều này từ các chuẩn code của Java (họ là những người “thân Java”). Thật sự thì under_score phổ biến ở các ứng dụng PHP cũ, sau này, khi PHP5 ra đời cũng như khi các PHP framework bùng nổ, camelCase được ưa chuộng hơn. Bản thân tôi cũng thích camelCase hơn. camelCase là cách viết thường chữ cái đầu tiên của từ đầu tiên và viết hoa chữ cái đầu tiên của các từ thứ hai trở về sau, không dùng ký tự “_”. Ví dụ:

$hottestGirl = getGirl(‘Paris Hilton’);

Tiếp theo là cách khai báo chuỗi, dùng dấu nháy kép (‘) hay nháy đơn (“) ? Trong PHP có 2 cách khai báo chuỗi, khai báo simple string và string. Khái báo simple string tức là khai báo chuỗi không có đặt biến vào trong đó. Ví dụ:

 $message = ‘I love you!’;

Và cách khai báo kia:

$message = “I will be $minute minutes late !”;

Trong cách thứ 2, một biến được đặt vào trong chuỗi ( ở đây là $minute), PHP engine sẽ tìm và thay thế giá trị của biến đó vào chuỗi. Bạn phải dùng dấu nháy kép nếu muốn làm như thế. Vấn đề ở đây là nếu dùng dấu nháy kép cho chuỗi không chứa biến, PHP sẽ mất công tìm. Ví vậy, tất cả các chuẩn đều khuyến cáo dùng dấu nháy đơn cho các chuỗi không chứa biến. Khi khai báo biến trong chuỗi, lập trình viên có thể thêm một cặp ngoặc nhọn, nhưng theo tôi làm như thế chỉ tổ rắc rối:

$message = “I will be {$minute} minutes late !”;

Về cách namespace cho các lớp. Bạn biết rằng PHP chưa hỗ trợ namespace, nhưng bạn vẫn có thể namespace cho các lớp của mình bằng cách dùng prefix và folder. Qua cách làm này, bạn có thể dễ dàng biết được file chứa lớp nằm ở đâu trên đĩa cứng, chỉ thông qua tên lớp. Ví dụ với lớp “ImHuy_Controller_Page”, thì bạn biết rằng nó được khai báo ở file ImHuy/Controller/Page.php. Tất nhiên, với mỗi lớp, hãy dùng một file riêng.

Một số chuẩn, ví dụ như chuẩn của PHPVietnam khuyến cáo đặt các subfix để đánh dấu nội dung của file. Ví dụ file chứa class thì có đuôi *.class.php, chứa interface thì *.interface.php, chứa template thì *.tpl.php. Nhưng tôi không thích cách làm này.

Chuẩn viết code cũ của PHPDoctrine có khuyến cáo không nên khai báo các hằng số ở mức global mà hãy đưa nó vào trong các lớp liên quan. Tất nhiên điều này chỉ áp dụng cho PHP5 trở lên.

Sau đây là một vấn đề không được nói đến trong các chuẩn nổi tiếng, nhưng tôi cho rằng nên chú ý đến nó !

Cách khai báo mảng. Ok, như bạn biết, mảng trong PHP khác hoàn toàn với mảng trong C, bạn có thể đánh index bằng chuỗi hoặc bằng số nguyên. Và PHP cũng không bắt buộc sự đồng nhất trong cách đặt index, bạn có thể đặt lẫn lộn, nhưng hãy nhìn đoạn code này:

$array = array();

$array[]       = ‘Paris Hilton’; // 0 => ‘Paris Hilton’
$array[‘baby’] = ‘Maggie Q’; // ‘baby’ => ‘Maggie Q’
$array[12]     = ‘Lindsay Lohan’; // 12 => ‘Lindsay Lohan’
$array[]       = ‘Jessica Alba’; // what’s here ?

Phần tử có giá trị ‘Jessica Alba’ có index là gì ? Ở đây là 13, nhưng bạn có cảm thấy “chột dạ” không ? PHP cho phép bạn thêm phần tử vào mảng một cách vô trách nhiệm như thế. Nhưng ngoại trừ khi bạn duyệt thêm phần tử mới, hoặc chắc chắn rằng bạn chỉ dùng số nguyên làm index cho mảng, hãy sử dụng một index rõ ràng khi gán phần tử mới cho mảng. Làm như thế chẳng tăng performance cho ứng dụng được bao nhiêu, nhưng sẽ giúp bạn quản lý code tốt hơn và tránh lỗi lặt vặt.

Một khuyến cáo khác là hạn chế số ký tự khi bạn dùng chuỗi để đặt index cho phần tử của mảng. Bạn có thể viết như thế này:

$array[‘I wanna say \’$$%$#$^&*^)\’ to you’] = ‘Something’;

Nhưng như thế đúng là holy shit, hãy chỉ dùng các ký tự ‘a-zA-Z0-9_’ mà thôi. Trong chuẩn của PHPVietnam có nhắc đến chuyện này, họ cho rằng như thế rất tiện lợi khi lấy dữ liệu từ database. Họ đúng ! 

Hasta la vista, baby !

Advertisements

About this entry