PHP-FIG คืออะไร

Saturday, November 29, 2014 4:41 PM 0 Comments , , ,

สำหรับบทความนี้เป็นการแปลมาจากเวป http://www.php-fig.org/ แบบคร่าวๆ และมั่วๆนะครับ ผิดพลาดประการใดก็ต้องขออภัยไว้ก่อนนะครับ



PHP-FIG นั้นย่อมาจาก PHP Framework Interop Group ซึ่งถ้าแปลเป็นภาษาไทยก็หมายถึง กลุ่มของ PHP Framework ที่ทำงานร่วมกัน โดยมี PHP Framework ดังๆเข้าร่วมกันเต็ม ซึ่งแนวคิดของกลุ่มจะเป็นการนำเสนอแนวทางที่จะทำงานร่วมกัน และทางกลุ่มก็ได้กำหนด Code Standard ขึ้นมาเรียกว่า PSR (PHP Standard Recommendation) โดยมี PSR ทั้งหมดดังนี้

PSR-0 Autoloading Standard (เลิกใช้เมื่อวันที่ 2014-10-21 โดยไปใช้ PSR-4 แทน)

PSR-1 Basic Coding Standard

PSR-2 Coding Style Guide

PSR-3 Logger Interface

PSR-4 Improved Autoloading


โดยผมจะไม่พูดถึง PSR-0 แล้วนะครับ มาเริ่มกันที่ PSR-1 เลยล่ะกัน


1. PSR-1 Basic Coding Standard

1.1 ต้องใช้ tag <?php หรือ <?= เท่านั้น

1.2 ไฟล์ต้องใช้ encoding UTF-8 without BOM

1.3 ชื่อของ Class, function, constant ต้องสื่อให้ถูกต้องกับสิ่งที่ทำ และต้องไม่มี  code ที่ก่อให้เกิด side effect ได้

1.4 Namespaces และ Class ต้องปฎิบัติตาม PSR-4

1.5 Class ต้องประกาศด้วย StudlyCaps

1.6 Class constant ต้องประกาศเป็นตัวอักษรใหญ่เท่านั้น

1.7 ชื่อแต่ละ Method ต้องประกาศด้วย camelCase



2. PSR-2 Coding Style Guide

2.1 code ต้องปฎิบัติตาม PSR-1

2.2 code ต้องใช้ 4 space indent แต่ละบรรทัด ห้ามใช้ tab  เป็นอันขาด

2.3 ไม่มีการจำกัดจำนวนบรรทัด ซึ่ง code แต่ละบรรทัดควรไม่เกิน 80 ตัวอักษร

2.4 เมื่อประกาศ namespace หรือ use ต้องเว้น 1 บรรทัด

2.5 ปีกกาเปิด { สำหรับ class ต้องอยู่บรรทัดต่อไปจากที่ประกาศชื่อ class และ ปีกกาปิด } ต้องอยู่บรรทัดถัดไปกับสิ่งที่อยู่ใน class

<?php
class KittinanHandsome
{
    //body
}
?>

2.6 ปีกกาเปิด { และ ปีกกาปิด } สำหรับ method ปฏิบัติเช่นเดียวกับข้อ 2.5 คือต้องเว้นบรรทัด

<?php
class KittinanHandsome
{
    public function getHeight()
    {
         return 180;
    }
}
?>

2.7 ประกาศ visibility (public, private, protected) ทุก property และ method ส่วน abstract และ final ต้องประกาศก่อน visibility และ static ต้องประกาศหลัง visibility

2.8 Control Structure  ทั้งหลาย (if else และ loop ต่างๆ)

2.8.1 ต้องมี 1 space ตามหลัง keyword เหล่านั้น

2.8.2 ต้องไม่มี space หลังวงเล็บเปิด

2.8.3 ต้องไม่มี space ก่อนวงเล็บปิด

2.8.4 ต้องมี 1 space ระหว่าง วงเล็บปิด กับ ปีกกาเปิด

2.8.5 code ที่อยุ่ภายใน Control Structure ต้องเว้น 1 indent (4 space)

2.8.6 ปีกกาเปิด ต้องยู่บรรทัดเดียวกับ keyword Control Structure

2.8.7 ปีกกาปิด ต้องอยู่บรรทัดใหม่ถัดจาก code ที่อยู่ภายใน Control Structure



3. PSR-3 Logger Interface

Logger Interface ประกอบไปด้วย 8 method (debug, info, notice, warning, error, critical, alert, emergency) ซึ่งเป็นไปตาม RFC 5424

ไปดูต่อได้ที่เวป php-fig เลยนะครับ ค่อนข้างเยอะ เริ่มขี้เกียจแล้ว



4. PSR-4 Autoloader

4.1 class ในที่นี่หมายถึง  class, interface, trait หรือ อะไรก็ตามที่มีโครงสร้างคล้ายแบบนี้

4.2 The fully qualified class name ต้องปฏิบัติตามฟอร์มนี้

\<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>

4.2.1 The fully qualified class name ต้องมี top level namespace หรือที่เรียกกันว่า vendor namespace

4.2.2 The fully qualified class name อาจมี sub-namespace ตั้งแต่ 1 หรือ มากกว่านั้น

4.2.3  The fully qualified class name ต้องปิดท้ายด้วย ชื่อ class

4.2.4 underscore ไม่มีความหมายพิเศษใดๆในส่วนต่างๆของ The fully qualified class name

4.2.5 ตัวอักษรใน The fully qualified class name อาจผสมระหว่างตัวเล็กและตัวใหญ่

4.2.6 ชื่อทุก class ต้องอ้างอิง case-sensitive fashion

ข้ออื่นๆของ PSR-4 Autoloader เริ่มแปลไม่ค่อยจะถูกแล้วครับ ยังไงดูตัวอย่างน่าจะเข้าใจได้มากกว่าครับ

https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader-examples.md


สุดท้าย ก็ขอให้ทุกคนพยายามปรับเปลี่ยน style การเขียน code ให้เข้ากับข้อกำหนดของ PSR Standard นะครับ


อ้างอิง
- http://www.php-fig.org
- https://github.com/php-fig/fig-standards



0 comments:

Ubuntu 14.04 Genymotion Cannot mix incompatible Qt library [Fixed]

Monday, November 24, 2014 3:25 PM 0 Comments


Error :

[Genymotion] [Fatal] Cannot mix incompatible Qt library (version 0x40801) with this library (version 0x40804)

Solve :

1. install package

sudo apt-get install libxi-dev libxmu-dev


2. use the system qt

mkdir QtLibs && mv *Qt*.so* QtLibs

0 comments:

หนังสือ Git ฉบับภาษาไทย ฟรี

Tuesday, November 4, 2014 4:10 PM 0 Comments

บังเอิญไปเจอมาครับ จึงเอามาแบ่งปัน

http://www.slideshare.net/dekcomgang/git-book



0 comments: