รูปแบบทั่วไปและไวยากรณ์
หน้านี้อธิบายกฎของการเขียนโค้ดซึ่งใช้กับการพัฒนาด้วย CodeIgniter
เนื้อหาต่างๆ
- การปิดแท็ก PHP
- การตั้งชื่อคลาสและเมธอด
- ชื่อตัวแปร
- การใส่ข้อคิดเห็นหรือคำอธิบาย
- ค่าคงที่
- TRUE, FALSE, และ NULL
- ตัวดำเนินตรรกะ
- เปรียบเทียบค่าที่คืนกลับมาและการเปลี่ยนรูปแบบ
- ตรวจสอบโค้ด
- ช่องว่างในไฟล์
- ความเข้ากันได้
- ตั้งชื่อคลาสและไฟล์ด้วยคำทั่วไป
- ตั้งชื่อตารางฐานข้อมูล
- หนึ่งไฟล์หนึ่งคลาส
- ช่องว่าง
- ขึ้นบรรทัดใหม่
- ย่อหน้าโค้ด
- เครื่องหมายก้ามปูและวงเล็บ
- เนื้อหาเฉพาะพื้นที่ในแผงควบคุม
- เมธอดและตัวแปรส่วนตัว
- ข้อผิดพลาดของ PHP
- การใช้แท็กแบบสั้น
- หนึ่งงานหนึ่งบรรทัด
- สตริง
- คิวรี่ SQL
- ค่าที่ถูกเลือกอัตโนมัติสำหรับส่งไปยังฟังก์ชัน
- การทับซ้อนของแท็กตัวแปร
การปิดแท็ก PHP
แท็กปิด PHP ในเอกสาร PHP (?>) ซึ่งเป็นทางเลือกหนึ่งของ PHP parser อย่างไรก็ตามถ้าใช้มัน whitespace ที่ตามหลังมันอาจจะทำให้เกิดผลลัพธ์ที่ไม่ถูกต้องหรือ PHP errors ได้หรือถูกระงับในภายหลัง ด้วยเหตุผลเหล่านี้ไฟล์ PHP ทุกไฟล์ควรละเลยการปิดแท็ก PHP และใช้การแทรกคำอธิบาย (comment) ลงไปในตำแหน่งจุดสิ้นสุดของไฟล์และบอกที่อยู่ของมันโดยขึ้นอยู่ภายใต้ application root. สิ่งนี้จะทำให้คุณค้นพบไฟล์ได้สะดวกไม่ถูกตัดโดย PHP parser
วิธีที่ไม่ถูกต้อง:
<?php
echo "Here's my code!";
?>
วิธีที่ถูกต้อง:
<?php
echo "Here's my code!";
/* End of file myfile.php */
/* Location: ./system/modules/mymodule/myfile.php */
การตั้งชื่อคลาสและเมธอด
ชื่อคลาสควรจะตั้งตัวอักษรแรกเป็นตัวพิมพ์ใหญ่ และเมธอดตัวสร้าง (constructor) จะต้องตรงกัน ถ้ามีหลายคำควรแ่บ่งแยกคำด้วย underscore(_), และไม่ใช่แบบตัวอักษรแรกของคำเป็นตัวพิมพ์ใหญ่ เช่น CamelCased. โดยเมธอดส่วนที่เหลือภายในคลาสจะต้องเป็นตัวเล็กและถูกตั้งชื่ออย่างชัดเจนเพื่อแดสงการทำงาน โดยเฉพาะอย่างยิ่งมีการใส่คำกริยา(verb)ลงไป พยายามหลีกเลี่ยงคำจำนวนมากและชื่อที่ใช้คำมากเกินไป
วิธีที่ไม่ถูกต้อง:
class superclass
class SuperClass
วิธีที่ถูกต้อง:
class Super_class
สังเกตุว่าคลาสและเมธอดตัวสร้าง(constructor method) จะต้องเหมือนกันทั้งชื่อและตัวพิมพ์
class Super_class {
function Super_class()
{
}
}
ตัวอย่างการตั้งชื่อเมธอด
วิธีที่ไม่ถูกต้อง:
function fileproperties() // ไม่ได้ถูกบรรยายและต้องการ underscore(_) เพื่อแยกคำ
function fileProperties() // ไม่ได้ถูกบรรยายและใช้แบบ CamelCase (ตัวอักษรแรกของคำเป็นตัวพิมพ์ใหญ่)
function getfileproperties() // ดีขึ้นแต่ยังขาด underscore(_) เพื่อแยกคำ
function getFileProperties() // ใช้ CamelCase
function get_the_file_properties_from_the_file() // ใช้คำเยอะเกินไป
วิธีที่ถูกต้อง:
function get_file_properties() // บรรยายดี, ใช้ underscore(_) เพื่อแยกคำ, และเป็นตัวอักษรพิมพ์เล็กทั้งหมด
ชื่อตัวแปร
นโยบายการตั้งชื่อมีลักษณะใลก้เคียงกับการตั้งเมธอดของคลาส โดยชื่อจะต้องมีเฉพาะอักษรพิมพ์เล็กใช้ underscore(_) ในการแยกคำและตั้งชื่ออย่างมีเหตุผลเพื่อแสดงจุดประสงค์และเนื้อหา โดยใช้คำสั้นๆ และใช้คำยกเว้นตัวแปรที่ต้องใช้ใน for() loops
วิธีที่ไม่ถูกต้อง:
$j = 'foo'; // ตัวแปรมีอักษรเดียวถ้าจะใช้ก็ใช้ใน for() loops เท่านั้น
$Str // มีตัวอักษรแบบพิมพ์ใหญ่
$bufferedText // ใช้ CamelCase และควรจะทำให้สั้นกว่านี้โดยไม่เสียความหมายเดิม
$groupid // หลายคำ แต่ไม่มี underscore(_)
$name_of_last_city_used // ยาวเกินไป
วิธีที่ถูกต้อง:
for ($j = 0; $j < 10; $j++)
$str
$buffer
$group_id
$last_city
การใส่ข้อคิดเห็นหรือคำอธิบาย
โดยปกติ , โค้ดควรที่จะถูกเขียนคำอธิบายอย่างสมบูรณ์ มันไม่ช่วยแค่อธิบายการทำงานหรือเจตนาของโค้ดสำหรับโปรแกรมเมอร์ที่มีประสบการณ์น้อยเท่านั้น แต่มันสามารถตรวจสอบสิ่งที่ประเมิณไม่ได้เมื่อคุณกลับมาดูโค้ดของตัวเองหลังจากผ่านไปหลายเดือน ไม่มีรูปแบบตายตัวสำหรับการใส่ข้อคิดเห็นหรือคำอธิบายแต่ทำตามแบบถัดไปนี้เป็นข้อแนะนำ
รูปแบบการใส่ข้อคิดเห็นหรือคำอธิบายแบบ DocBlock ที่มาก่อนการประกาศคลาสและเมธอดเป็นที่ถูกเลือกใช้งานใน IDE หลายตัว:
/**
* Super Class
*
* @package ชื่อแพคเกจ
* @subpackage แพคเกจย่อย
* @category หมวดหมู่
* @author ชื่อผู้จัดทำ
* @link http://example.com
*/
class Super_class {
/**
* เข้ารหัสสตริงเพื่อใช้ใน XML
*
* @access public
* @param string
* @return string
*/
function xml_encode($str)
ใช้การใส่ความคิดเห็นหรือคำอธิบายเพียงบรรทัดในส่วนของโค้ด และให้ปล่อยบรรทัดว่างไว้ระหว่างข้อคิดเห็นจำนวนมากและโค้ด
// แยกสตริงด้วยบรรทัดใหม่
$parts = explode("\n", $str);
// เป็นข้อคิดเห็นที่ยาวซึ่งต้องบอกข้อมูลให้ชัดเจนมากขึ้นว่าเกิดอะไรขึ้น
// และทำไมถึงใช้หลายการแสดงข้อคิดเห็นแบบบรรทัดเดียว(single-line comments)
// โดยพยายามจำกัดความกว้างอย่างมีเหตุมีผล โดยใช้ตัวอักษรประมาณ 70 ตัวอักษร
// เพื่อให้อ่านง่ายที่สุด และอย่าลังเลที่จะลิงค์แหล่งข้อมูลภายนอก ถ้ามันรายละเอียดที่ดีกว่า
//
// http://example.com/information_about_something/in_particular/
$parts = $this->foo($parts);
ค่าคงที่
ค่าคงที่ให้ทำตามแบบเดียวกับข้อแนะนำให้การสร้างตัวแปร ยกเว้นเรื่องหนึ่งคือค่าคงที่จะต้องเป็นตัวใหญ่พิมพ์ใหญ่ทั้งหมดเสมอ. ใช้ค่าคงที่มีในเตรียมไว้ใน ExpressionEngine อย่างสม่ำเสมอ เช่น SLASH, LD, RD, PATH_CACHE, etc.
วิธีที่ไม่ถูกต้อง:
myConstant // ขาด underscore(_) เพื่อแยกคำและไม่ใช่ตัวพิมพ์ใหญ่ทั้งหมด
N // ห้ามใช้ตัวอักษรเดียวกับค่าคงที่
S_C_VER // ไม่สามารถอธิบายได้
$str = str_replace('{foo}', 'bar', $str); // ควรใช้ค่าคงที่ LD และ RD
CORRECT:
MY_CONSTANT
NEWLINE
SUPER_CLASS_VERSION
$str = str_replace(LD.'foo'.RD, 'bar', $str);
TRUE, FALSE, และ NULL
TRUE, FALSE, และ NULL คำเหล่านี้ควรจะใช้เป็นตัวพิมพ์ใหญ่ทั้งหมด
วิธีที่ไม่ถูกต้อง:
if ($foo == true)
$bar = false;
function foo($bar = null)
วิธีที่ถูกต้อง:
if ($foo == TRUE)
$bar = FALSE;
function foo($bar = NULL)
ตัวดำเนินตรรกะ
การใช้ || เป็นสิ่งที่ไม่เห็นด้วยเพราะความชัดเจนต่ำของมันในอุปกรณ์บางอย่างทำให้มีลักษณะคล้ายกับผลลัพธ์อื่นๆ เช่น คล้ายๆเลข 11 ส่วน && ถูกแนะนำให้ใช้มากกว่า AND แต่ถ้าจะใช้ก็ยอมรับได้ สุดท้ายควรใส่ช่องว่างข้างหน้าและตามหลังเครื่องหมาย !
วิธีที่ไม่ถูกต้อง:
if ($foo || $bar)
if ($foo AND $bar) // โอเคแต่ไม่แนะนำสำหรับการไฮไลต์ไวยากรทั่วไปของแอพพลิเคชั่น
if (!$foo)
if (! is_array($foo))
วิธีที่ถูก:
if ($foo OR $bar)
if ($foo && $bar) // แนะนำ
if ( ! $foo)
if ( ! is_array($foo))
เปรียบเทียบค่าที่คืนกลับมาและการเปลี่ยนรูปแบบ
ฟังก์ชัน PHP จะคืนค่าเป็น FALSE เมื่อเกิดความล้มเหลวแต่อาจมีค่าที่ส่งกลับมาเป็น "" หรือ 0 ซึ่งจะถูกแปลงเป็น FALSE เมื่ออยู่ในการเปรียบเทียบ เพื่อความชัดเจนเมื่อไรที่มีการเปรียบเทียบค่าของตัวแปร ให้แน่ใจว่าค่าที่คืนออกมาเป็นสิ่งที่คุณคาดหวังไว้และไม่ใช่ค่าที่มีค่าเทียบเท่าเมื่อถูกแปลง
ใช้ความเข้มงวดทั้งการคืนค่าและตรวจสอบค่าของตัวแปร ใช้ === และ !== เมื่อจำเป็น
วิธีที่ไม่ถูกต้อง:
// ถ้า 'foo' อยู่ตำแหน่งเริ่มต้นของสตริง, strpos จะคืนค่าเป็น 0,
// โดยผลลัพธ์ของเงื่อนไขนี้น่าจะเป็น TRUE
if (strpos($str, 'foo') == FALSE)
วิธีที่ถูก:
if (strpos($str, 'foo') === FALSE)
วิธีที่ไม่ถูกต้อง:
function build_string($str = "")
{
if ($str == "") // uh-oh! จะเป็นอย่างไรถ้า FALSE หรือเลข 0 ถูกส่งมา?
{
}
}
วิธีที่ถูก:
function build_string($str = "")
{
if ($str === "")
{
}
}
ดูข้อมูลเพิ่มเติ่มเกี่ยวกับ typecasting , ซึ่งมีประโยชน์พอสมควร. Typecasting has a slightly different effect which may be desirable. When เปลี่ยนค่าตัวแปรเป็นสตริง , ตัวอย่างเช่น NULL และบูลีน FALSE จะกลายเป็นสตริงทีแบบว่าง , 0 (และตัวเลขอื่นๆ) กลายเป็นสตริงที่เป็นตัวเลข, และบูลีน TRUE กลายเป็น "1":
$str = (string) $str; // เปลี่ยน $str เป็นสตริง
ตรวจสอบโค้ด
ไม่มีใช้โค้ดตรวจสอบหลงเหลือได้ก่อนจะที่ถูกยินยอมนำไปใช้ ยกเว้นว่ามันจะถูกคอมเม้นต์ออก เช่น ไม่มี var_dump(), print_r(), die(), and exit() ถูกเหลือในขณะที่สร้าง ยกเว้นมันถูกคอมเม้นต์ออก
// print_r($foo);
ช่องว่างในไฟล์
ไม่มีช่องว่างอยู่ข้างหน้าตัวแท็กเปิด PHP หรือตามหลังแท็กปิด PHP. ผลลัพธ์ของ ExpressionEngine นั้นถูกเก็บไว้, ดังนั้นช่องว่างในไฟล์ของคุณสามาถทำให้เกิดผลลัพธ์ก่อนที่ ExpressionEngine จะส่งผลลัพธ์ของมัน , ซึ่งนำไปสู่การเปิดข้อผิดพลาดและไม่สามารถทำงานได้สำหรับ ExpressionEngine ในการส่ง header ที่้เหมาะสม. ในตัวอย่างด้านล่างนี้ ให้เลือกข้อความด้วยเมาส์ของคุณเพื่อเห็นผลลัพธ์ที่เป็นช่องว่าง
วิธีที่ไม่ถูกต้อง:
<?php
// ...มันมีช่องว่างและการขึ้นบรรทัดใหม่เหนือคำแท็กเปิด PHP
// และยังมีช่องว่างหลังปิดแท็ก PHP
?>
วิธีที่ถูกต้อง:
<?php
// นี้คือตัวอย่างที่ไม่มีช่องว่างก่อนหรือหลังการเปิดปิดแท็ก PHP
?>
ความเข้ากันได้
นอกจากลักษณะเฉพาะที่กล่าวถึงในเอกสารที่เพิ่มมาของคุณ , โค้ดทั้งหมดจะต้องรองรับ PHP เวอร์ชั่น 4.3 ขึ้นไป. เพิ่มเติมอย่าใช้ฟังก์ชัน PHP ซึ่งต้องการไลบรารี่ที่ไม่ใช่ไลบรารี่ปกติ ในการติดตั้งนอกจากโค้ดของคุณมีทางเลือกของเมทอด สำหรับฟังก์ชันที่ใช้ไม่สามารถใช้ได้ หรือบอกในเอกสารของคุณว่าต้องการไลบรารี่ PHP ตัวใด
ตั้งชื่อคลาสและไฟล์ด้วยคำทั่วไป
เมื่อไรที่ชื่อคลาสหรือไฟล์ของคุณใช้คำทั่วไปหรืออาจจะเหมือนกับชื่อ PHP Script ตัวอื่นแนะนำให้คุณใส่คำนำหน้าเพื่อป้องกันชื่อชนกัน ให้นึกเสมอว่าผู้ใช้อาจจะใช้ตัวเสริมหรือ PHP Script จากที่อื่น ดังนั้นให้คุณเลือกคำนำหน้าที่เฉพาะเจาะจงกับลักษณะเฉพาะของผู้พัฒนาหรือบริษัทที่สร้าง
วิธีที่ไม่ถูกต้อง:
class Email pi.email.php
class Xml ext.xml.php
class Import mod.import.php
วิธีที่ถูกต้อง:
class Pre_email pi.pre_email.php
class Pre_xml ext.pre_xml.php
class Pre_import mod.pre_import.php
ตั้งชื่อตารางฐานข้อมูล
ตารางใดก็ตามที่โปรแกรมเสริมของคุณอาจจะใช้ จะต้องมีคำนำหน้าตารางด้วยคำที่บงบอกถึงโปรเจค เช่น 'exp_' ตามด้วยคำนำหน้าของผู้พัฒนาหรือบริษัทและถึงจะเป็นชื่อคำอธิบายตาราง คุณไม่ต้องยึดหลักนี้สำหรับการตั้งคำนำหน้าในฐานข้อมูลที่จะไปใช้ โดยในคลาสฐานข้อมูลของ ExpressionEngine นั้นใช้ 'exp_' เป็นคำนำหน้า (ดังนั้นถ้าใช้ CI อาจจะใช้คำว่า 'ci_' หรืออื่นๆ)
วิธีที่ไม่ถูกต้อง:
email_addresses // missing both prefixes
pre_email_addresses // missing exp_ prefix
exp_email_addresses // missing unique prefix
วิธีที่ถูกต้อง:
exp_pre_email_addresses
ข้อสังเกตุ: อันนี้ผมได้ทำการแปลใหม่ เพื่อให้ใช้คำแนะนำนี้ได้มากขึ้นโดยไม่จำเป็นต้องใช้ CodeIgniter เสริมอีกนิดข้อควรระวังคือ MySQL นั้นจำกัดตัวอักษรของชื่อตารางที่ 64 ตัวอักษร ดังนั้นหลีกเลี้ยงการใช้คำยาวๆ
หนึ่งไฟล์หนึ่งคลาส
แยกไฟล์สำหรับคลาสแต่ละอันของคุณ ยกเว้นว่าคลาสเหล่านั้นจะ ใกล้ชิดกันอย่างมาก ยกตัวอย่างเช่น ไฟล์ของ ExpressionEngine ซึ่งมีหลายคลาสคือคลาส Database (ฐานข้อมูล) ซึ่งมีทั้งคลาส DB และ DB_Cache และ Magpie plugin ซึ่งมีทั้งคลาส Magpie และ Snoopy
ช่องว่าง
ใช้การแท็บสำหรับช่องว่างในโค้ดของคุณ ไม่ใช่กด space(bar) หลายๆครั้ง สิ่งนี้อาจเห็นเป็นสิ่งเล็กน้อยแต่การใช้แท็บแทนการใช้ space นั้นยอมให้ผู้พัฒนาผู้อื่นเห็นโค้ดของคุณได้ตามที่เขาต้องการตามและปรับเปลี่ยนแก้ไขได้ง่าย และผลประโยชน์ทางอ้อมคือไฟล์เล็กลง โดยเปรียบเทียบระหว่างหนึ่งแท็บกับ 4 space(bar) ตัวอักษร
ขึ้นบรรทัดใหม่
ไฟล์ต่างๆต้องถูกบันทึกด้วยการขึ้นบรรทัดใหม่ของ Unix(Unix line breaks) ซึ่งเป็นปัญหาสำหรับนักพัฒนาที่ทำงานใน Windows มากกว่าแต่ยังไงก็ตาม ให้คุณแน่ใจว่า Text Editor(ตัวแก้ไขไฟล์) ของคุณมีการบันทึกไฟล์ด้วยการขึ้นบรรทัดใหม่ของ Unix
ย่อหน้าโค้ด
ให้คุณใช้การย่อหน้าแบบ Allman (Allman Style) ยกเว้นการประกาศชื่อคลาส วงเล็บปีกกาถูกว่างไว้เสมอบนบรรทัดโดยมีเฉพาะตัวมันเอง และถูกย่อหน้าเข้าไปไว้กับระดับตัวควบคุมการทำงานที่เป็นของพวกมัน
วิธีที่ไม่ถูกต้อง:
function foo($bar) {
// ...
}
foreach ($arr as $key => $val) {
// ...
}
if ($foo == $bar) {
// ...
} else {
// ...
}
for ($i = 0; $i < 10; $i++)
{
for ($j = 0; $j < 10; $j++)
{
// ...
}
}
วิธีที่ถูกต้อง:
function foo($bar)
{
// ...
}
foreach ($arr as $key => $val)
{
// ...
}
if ($foo == $bar)
{
// ...
}
else
{
// ...
}
for ($i = 0; $i < 10; $i++)
{
for ($j = 0; $j < 10; $j++)
{
// ...
}
}
เครื่องหมายก้ามปูและวงเล็บ
โดยทั่วไปเครื่องหมายวงเล็บและก้ามปูเวลาใช้ไม่ควรใส่ช่องว่างเพิ่ม มีข้อยกเว้นเดียวนั้นคือช่องว่างที่จะตามด้วยโครงสร้างควบคุมใน PHP ซึ่งรับ argument ด้วยวงเล็บ (declare, do-while, elseif, for, foreach, if, switch, while), เพื่อช่วยให้แยกแยะจากฟังก์ชันและทำให้อ่านง่ายขึ้น
วิธีที่ไม่ถูกต้อง:
$arr[ $foo ] = 'foo';
วิธีที่ถูกต้อง:
$arr[$foo] = 'foo'; // ไม่มีช่องว่างระหว่างอาร์เรย์คี
วิธีที่ไม่ถูกต้อง:
function foo ( $bar )
{
}
วิธีที่ถูกต้อง:
function foo($bar) // ไม่มีช่องว่างระหว่างวงเล็บในการประกาศฟังก์ชัน
{
}
วิธีที่ไม่ถูกต้อง:
foreach( $query->result() as $row )
วิธีที่ถูกต้อง:
foreach ($query->result() as $row) // เว้นช่องว่างเดียวแล้วตามด้วยตัวควบคุมโครงสร้างแต่ไม่ได้อยู่ภายในวงเล็บ
เนื้อหาเฉพาะพื้นที่ในแผงควบคุม
เนื้อหาใดๆซึ่งมีผลลัพธ์ในแผงควบคุมควรใช้ตัวแปรภาษาในไฟล์โมดูลภาษา (module's lang) เพื่อรองรับการทำ localization (การจำกัดเฉพาะพื้นที่).
วิธีที่ไม่ถูกต้อง:
return "Invalid Selection";
วิธีที่ถูกต้อง:
return $LANG->line('invalid_selection');
เมธอดและตัวแปรส่วนตัว
เมธอดและตัวแปรซึ่งถูกใช้งานได้ภายในคลาสของคุณ โดยฟังก์ชัน utility และ helper ซึ่งเป็นเมธอดสาธารณะแต่โค้ดยังไม่สมบูรณ์ ควรจะถูกนำหน้าด้วย underscore(_) เพื่อทำให้เป็นเมธอดหรือตัวแปรส่วนตัวไปก่อน
convert_text() // เมธอดสาธารณะ
_convert_text() // เมธอดส่วนตัว
ข้อผิดพลาดของ PHP
โค้ดจะต้องถูกเรียกโดยไม่มีข้อผิดพลาดและไม่ขึ้นคำเตือนและข้อสังเกตุให้เห็น เพื่อตรงความต้องการ ในกรณีนี้ อย่าใช้ตัวแปรที่คุณไม่ได้สร้างขึ้นมาเอง (อย่างเช่นอาเรย์ $_POST) โดยไม่มีการเช็คว่าถูกสร้างหรือไม่ก่อนด้วยคำสั่ง isset()
ให้คุณแน่ใจว่าขณะที่พัฒนา รายงานข้อผิดพลาดถูกเปิดใช้งานสำหรับผู้ใช้ทุกคนและ display_errors ถูกใช้งานในสภาพแวดล้อมในการพัฒนาด้วย PHP คุณสามารถตรวจสอบค่านี้ได้ด้วยดังนี้
if (ini_get('display_errors') == 1)
{
exit "Enabled";
}
บนเครื่องเซิฟร์เวอร์ที่ปิด display_errors และคุณไม่มีสิทธิที่จะไปเปลี่ยนใน php.ini คุณสามารถเปิดใช้งานมันได้ด้วยคำสั่ง
ini_set('display_errors', 1);
ข้อสังเกตุ: การตั้งค่า display_errors ด้วยคำสั่ง ini_set() จะเกิดขึ้นตอนเวลากำเนินการ(runtime) ซึ่งไม่เหมือนกับการตั้งค่าเปิดการทำงานในสภาพแวดล้อมของ PHP กล่าวคือมันจะไม่เกิดผลใดๆ ถ้าสคริปเกิดมีข้อผิดพลาด สรุปก็คือมันจะไม่ขึ้น Warning (คำเตือน) ถ้าเกิดมี Error (ข้อผิดพลาด)
การใช้แท็กแบบสั้น
ใช้แท็ก PHP แบบตัวเต็มทุกครั้ง ในกรณีที่เซิฟร์เวอร์ไม่ได้เปิดการใช้งาน "การใช้แท็กแบบสั้น" (short_open_tag)
วิธีที่ไม่ถูกต้อง:
<? echo $foo; ?>
<?=$foo?>
วิธีที่ถูกต้อง:
<?php echo $foo; ?>
หนึ่งงานหนึ่งบรรทัด
อย่ารวมงานหลายๆงานภายในหนึ่งบรรทัด
วิธีที่ไม่ถูกต้อง:
$foo = 'this'; $bar = 'that'; $bat = str_replace($foo, $bar, $bag);
วิธีที่ถูกต้อง:
$foo = 'this';
$bar = 'that';
$bat = str_replace($foo, $bar, $bag);
สตริง
ใช้สตริงแบบ single quoted (') เสมอยกเว้นว่าคุณต้องการใส่ตัวแปรเพื่อประมวลผล และในกรณีคุณต้องการให้ตัวแปรถูกประมวลผล ให้ใช้วงเล็บปีกกา ({ }) เพื่อป้องกันสิ่งที่ไม่เกี่ยวข้องถูกส่งไปด้วย คุณอาจจะใช้ double-quoted strings (") ถ้าภายในสตริงมีการใช้ single quotes ดังนั้นคุณเลยไม่ต้องใช้ตัวอักษรลี้ภัย(escape characters)
วิธีที่ไม่ถูกต้อง:
"My String" // ไม่มีการใส่ตัวแปลดังนั้นไม่ต้องใช้ double quotes
"My string $foo" // ต้องการวงเล็บปีกกา
'SELECT foo FROM bar WHERE baz = \'bag\'' // ดูไม่ดี
วิธีที่ถูกต้อง:
'My String'
"My string {$foo}"
"SELECT foo FROM bar WHERE baz = 'bag'"
คิวรี่ SQL
คำหลักที่ใช้งานใน MySQL จะเป็นตัวใหญ่ทั้งหมด: SELECT, INSERT, UPDATE, WHERE, AS, JOIN, ON, IN, etc.
แตกคิวรี่ยาวๆเป็นหลายๆบรรทัดเพื่อความชัดเจนและอ่านง่าย โดยแนะนำว่าให้แตกออกเป็นแต่ละประโยค
วิธีที่ไม่ถูกต้อง:
// คำีหลักที่ใช้งานเป็นตัวเล็กและคิวรี่ยาวมากสำหรับ
// บรรทัดเดียว (... เป็นสัญลักษณ์เพื่อบอกว่าบรรทัดนี้เป็นบรรทัดที่ต่อจากบรรทัดก่อน)
$query = $this->db->query("select foo, bar, baz, foofoo, foobar as raboof, foobaz from exp_pre_email_addresses
...where foo != 'oof' and baz != 'zab' order by foobaz limit 5, 100");
วิธีีที่ถูกต้อง:
$query = $this->db->query("SELECT foo, bar, baz, foofoo, foobar AS raboof, foobaz
FROM exp_pre_email_addresses
WHERE foo != 'oof'
AND baz != 'zab'
ORDER BY foobaz
LIMIT 5, 100");
ค่าที่ถูกเลือกอัตโนมัติสำหรับส่งไปยังฟังก์ชัน
เหมาะสมเมื่อไรให้เราจัดหาค่าอัตโนมัติที่จะถูกส่งไปยังฟังก์ชัน ซึ่งช่วยป้องกันข้อผิดพลาด PHP โดยที่เรียกใช้ผิดและเสนอค่าทางเลือก ซึ่งช่วยประหยัดเวลาเขียนโค้ดได้หลายบรรทัด ตัวอย่างเช่น:
function foo($bar = '', $baz = FALSE)
การทับซ้อนของแท็กตัวแปร
หลีกเลี่ยงการใช้หลายแท็กตัวแปรที่ให้ผลเหมือนกัน ตัวอย่างเช่น แทนที่จะใช้ include=และ exclude= บางทีเราจะยอมให้ include= ดูแลแค่ตัวแปรเดียวตามด้วยคำว่า "not", ยกตัวอย่างเช่น include="not bar". สิ่งนี้จะป้องกันปัญหาตัวแปรทับซ้อนกันหรือมีความกังวลว่าตัวแปรไหนมีความสำคัญกว่าอีกตัวหนึ่ง
เสริม: สิ่งที่เขาบอกเป็นเพียงตัวอย่างให้เห็นภาพ เพื่อที่จะได้ไม่ใช้ตัวแปรพร่ำเพรื่อ แล้วทำให้เกิดความสับสนและกังกลกับการเลือกและใช้ตัวแปร