Basic Coding Standard PSR-1
ใน PSR-1 จะกล่าวถึง กฏการใช้งานไฟล์ PHP และ กฏการตั้งชื่อคลาส ซึ่งจะมีทั้งสิ่งที่ต้องทำ สิ่งที่ควรจะทำ และสิ่งที่ควรหลีกเลี่ยง เพื่อให้โค้ดเป็นระเบียบ และ มีความเข้าใจที่สอดคล้องกันสำหรับนักพัฒนาแต่ละท่าน ซึ่งจะช่วยให้การตรวจสอบ ตลอดจนการพัฒนาต่อจากนักพัฒนาก่อนหน้าทำได้ง่ายขึ้น
ตัวอย่างคำสั่งที่อาจมีผลกระทบ หรืออาจมีผลข้างเคียงได้ไฟล์
- ให้ใช้ <?php ?> สำหรับไฟล์ PHP เท่านั้น และสามารถใช้ <?= ?> แทน <?php echo ... ?> ได้
- ไฟล์ PHP ต้องเป็น UTF-8 without BOM เท่านั้น
- หลีกเลี่ยงการใช้ชื่อฟังก์ชั่น ชื่อตัวแปร ชื่อคลาส หรืออื่นๆ ที่อาจมีผลข้างเคียง เช่นอาจมาทับตัวแปรหรือฟังก์ชั่นที่มีอยู่ก่อนแล้ว เช่น ตัวแปรหรือฟังก์ชั่นในคลาสหลัก ตลอดจนการแก้ไขค่าของตัวแปรระบบต่างๆของ PHP
<?php
// ผลข้างเคียงจากการแก้ไขค่าติดตั้งของ PHP บางคำสั่งอาจมีผลให้ Server ทำงานผิดปกติได้
ini_set('error_reporting', E_ALL);
// ผลข้างเคียงจาการ include file จากภายนอกอาจทำให้ค่าตัวแปรต่างๆมีการเปลี่ยนแปลง เช่น ถูกเปลี่ยนแปลงใน file.php
include "file.php";
// ผลข้างเคียงอันเกิดจาการแสดงผล เช่น การส่งออก output ก่อนการประกาศ session
echo "<html>\n";
// ผลค้างเขียงจากการประกาศฟังก์ชั่น ชื่อฟังก์ชั่นอาจซ้ำกันกับฟังก์ชั่นของ PHP หรือ ฟังก์ชั่นจาก คลาสหลัก
function foo()
{
// function body
}
ตัวอย่างด้านบน เป็นเพียงข้อควรระวังเท่านั้นนะครับ ไม่ใช่ข้อห้ามแต่อย่างใด เพียงแต่ ควรใช้อย่างระมัดระวัง
สำหรับการป้องกันผลข้างเคียงจากการประกาศฟังก์ชั่น อาจใช้วิธีการทดสอบว่ามีฟังก์ชั่นอยู่ก่อนแล้วหรือไม่ ดังตัวอย่างด้านล่าง
// ตรวจสอบว่ามีฟังก์ชั่นหรือไม่ ก่อนการประกาศฟังก์ชั่นใหม่
if (!function_exists('foo')) {
function foo()
{
// function body
}
}
Namespace และ Classname
- ชื่อคลาสต้องปฎิบัติตาม PSR-4
- นั่นหมายความว่า คลาสจะต้องประกอบด้วย Namespaces อย่างน้อย 2 ระดับ คือ Vender\Namespaces\Classname (Vender หมายถึงเจ้าของคลาสหรือผู้เขียนคลาส)
- สำหรับ PHP เวอร์ชั่น 5.2 หรือต่ำกว่าจะไม่สามารถใช้ Namespaces ได้ ให้ใช้ _ เชื่อมระหว่าง Vender, Namespaces และ Classname แทน
- Classes ต้องถูกโหลดโดยอัตโนมัติเมื่อมีการเรียกใช้ (autoloading) ตามมาตรฐานของ PSR-4
- ชื่อคลาส ต้องสื่อความหมาย และอยู่ในรูปแบบ StudlyCaps (ขึ้นต้นด้วยตัวอักษรพิมพ์ใหญ่ในแต่ละคำ และต่อคำโดยไม่มีสัญลักษณ์ใดๆคั่น)
<?php
// ตั้งแต่ PHP 5.3 ขึ้นมา
namespace Vendor\Namespaces;
class ClassName
{
}
ถ้าเขียนในเวอร์ชัน 5.2.x หรือก่อนหน้า ใช้ _ เชื่อมระหว่าง Vender, Namespaces และชื่อคลาสแทน
<?php
// ตั้งแต่ PHP 5.2.x หรือก่อนหน้า
class Vendor_Namespaces_ClassName
{
}
ค่าคงที่, ตัวแปร, และ เมธอด
- ค่าคงที่ (Constants) ควรอยู่ในรูปแบบ ตัวอักษรตัวพิมพ์ใหญ่เท่านั้น คั่นแต่ละคำด้วย _ (ขีดเส้นใต้)
- ตัวแปร (Properties) ควรอยู่ในรูปแบบ $under_score (ตัวพิมพ์เล็กทั้งหมด เชื่อมแต่ละคำด้วย _)
- เมธอด (Methods) ควรอยู่ในรูปแบบ camelCase (คำแรกเป็นตัวพิมพ์เล็กทั้งหมด คำถัดมาขึ้นต้นด้วยตัวพิมพ์ใหญ่ และต่อคำโดยไม่มีสัญลักษณ์ใดๆคั่น)
<?php
namespace Vendor\Namespaces;
class ClassName
{
// ค่าคงที่
const VERSION = '1.0';
const DATE_APPROVED = '2012-06-01';
// ตัวแปร
public $under_score;
// เมธอด
function myFunction () {
}
}