Reference:
http://framework.zend.com/manual/en/coding-standard.html
อ้างอิงจาก Zend Framework Coding Standard
PHP File Formatting (รูปแบบทั่วไป)
- File ที่มีแต่ PHP code ให้เริ่มด้วย <?php และไม่ต้องปิดด้วย ?>
เพื่อป้องกัน space ที่เกินอยู่หลัง ?> ต่อท้าย output โดยไม่ตั้งใจ
- ย่อหน้า 4 space -- ห้ามใช้ Tab
- ไม่ควรให้บรรทัดยาวเกิน 80 ตัวอักษร แต่ในกรณีที่จำเป็น 120 ตัวอักษรก็ยังพอได้อยู่
- ให้ปิดบรรทัดด้วยตัวปิดบรรทัดแบบ UNIX (0x0A)
Naming Conventions (การตั้งชื่อ)
- Class ให้ขึ้นด้วยตัวอักษรใหญ่
- Filename ให้ลงท้ายด้วย .php (555)
- Function and method ให้ใช้ตัวอักษรล้วน (a-z, A-Z) แบบ "camelCase"
(ขึ้นด้วยตัวอักษรเล็ก และใช้ตัวใหญ่เมื่อเริ่มต้นคำใหม่)
- Variable (ตัวแปร) ให้ใช้แบบเดียวกับ function และ method
- Constant (ค่าคงที่) ให้ใช้ตัวอักษรใหญ่และคั่นระหว่างคำด้วย _
Coding Style (การเขียน code)
ใช้ tag แบบเต็มรูปแบบ
<?php ?>
และถ้า File นั้นมีแต่ PHP code ก็ไม่จำเป็นต้องปิดด้วย ?>
Strings
- String ธรรมดาใช้ Single Quote ปิด
$a = 'Example String';
- String ที่มี Single Quote ให้ใช้ Double Quote แทน
$sql = "SELECT `id`, `name` from `people` WHERE `name`='Fred' OR `name`='Susan'";
- String ที่มีการแทนด้วยตัวแปรให้ใช้ได้ 2 รูปแบบ
$greeting = "Hello $name, welcome back!";
$greeting = "Hello {$name}, welcome back!";- การต่อ String ด้วย "." ให้เว้นวรรคหน้าและหลัง . ด้วย เพื่อความง่ายในการอ่าน
$company = 'Zend' . ' ' . 'Technologies';
สำหรับการต่อ String ข้ามบรรทัดให้วางจุดไว้หน้าบรรทัด ให้ตรงกับเครื่องหมายเท่ากับ
$sql = "SELECT `id`, `name` FROM `people` "
. "WHERE `name` = 'Susan' "
. "ORDER BY `name` ASC ";ผมคิดว่าน่าจะเอาตัวเชื่อม (.) ไว้ที่บรรทัดก่อนหน้าน่าจะดี
จะได้ไม่สับสนว่าต้องวางเครื่องหมายไว้บรรทัดบน หรือล่าง
ไว้ข้างบนหมดเลยน่าจะดีกว่า เผื่อว่าต้องไปเขียนภาษาอื่นที่ไม่ต้องปิดบรรทัด
เช่น python, ruby, ... จะได้ฝึกวางตัวเชื่อมทิ้งไว้บรรทัดบนด้วย หึหึ
Arrays
- Numerical Indexed Array (ใช้ตัวเลขเป็น index) ให้เคาะ space หลังจากเครื่องหมาย , เสมอ
(เป็นพื้นฐานของการพิมพ์ดีด -- ทำให้อ่านง่ายด้วยครับ)
- Associative Array (ใช้ string เป็น key) ให้เรียง Key และ Value ทั้งหมดให้อยู่ในแนวเดียวกัน
$sampleArray = array('firstKey' => 'firstValue',
'secondKey' => 'secondValue');
Classes
- Class Declaration
ตั้งชื่อตาม naming convention, มี document block
/**
* Documentation Block Here
*/
class SampleClass {
// all contents of class
// must be indented four spaces
}ผมแก้นิดหน่อย ไม่ตรงตาม ZF นะ
- Class Member Variables
ตั้งชื่อตาม naming convention, ห้ามใช้ var ให้ใช้ private, protected หรือ public
(ไม่แนะนำให้ใช้ public member ควรใช้ accessor method (set-get) ดีกว่า)
Functions and Methods
/**
* Documentation Block Here
*/
class Foo {
/**
* Documentation Block Here
*/
public function bar() {
// all contents of function
// must be indented four spaces
}
}
การส่ง Parameter by reference จะต้องถูกกำหนดตั้งแต่การ declare
ไม่ควรกำหนดตอนเรียกใช้ function เช่น
public function bar(&$baz) {
}
return ไม่ต้องใส่วงเล็บ
public function bar() {
return $this->bar;
}
Control Statements
- If/Else/ElseIf
if ($a != 2) {
$a = 2;
} elseif ($a == 3) {
$a = 4;
} else {
$a = 7;
}
ให้ใช้ { } เสมอแม้ว่าจะมีประโยคเดียว
- Switch
switch ($numPeople) {
case 1:
break;
case 2:
break;
default:
break;
}