Coding Style Guide PSR-2 ตอนที่ 1

เจตนาของคู่มือนี้เพื่อให้รูปแบบในการเขียนโค้ดเป็นไปในทางเดียวกัน โดยไม่จำเป็นต้องตรงเป๊ะตามมาตรฐานนี้ก็ได้ ทั้งนี้เนื่องจากเครื่องมือแต่ละตัวอาจมีคุณสมบัติบางอย่างไม่สอดคล้องกับมาตรฐานนี้ โดยแนะนำให้ใช้การตกลงกันในทีมและแบ่งปันกฏการจัดรูปแบบนี้ เพื่อให้โค้ดมีรูปแบบเป็นไปในทิศทางเดียวกัน
 

มาตรฐานการเขียนโค้ด

        
  • การเขียนโค้ดต้องปฏิบัติตาม PSR-1
  •     
  • ไฟล์     
              
    • แต่ละบรรทัดของ PHP ต้องปิดด้วย Unix LF เสมอ (ใน Windows จะใช้ \r\n ในการขึ้นบรรทัดใหม่ ในขณะที่บน Unix(หรือ Linux) ใช้ \n อย่างเดียวสำหรับการขึ้นบรรทัดใหม่)
    •         
    • จบแต่ละไฟล์ด้วยบรรทัดว่างๆ 1 บรรทัด
    •         
    • ไม่ต้องใช้ ?> ปิดที่บรรทัดสุดท้ายของโค้ด หากไฟล์นั้นเป็น PHP ล้วน
    •     
        
  •     
  • บรรทัด     
              
    • ใน 1 ไฟล์จะมีกี่บรรทัดก็ได้
    •         
    • ในแต่ละบรรทัดสามารถมีจำนวนตัวอักษรสูงสุดไม่เกิน 120 ตัวอักษร (เพื่อให้สามารถเห็นโค้ดทั้งหมดได้โดยไม่ต้องเลื่อนหน้า)
    •         
    • ในแต่ละบรรทัดแนะนำให้มีจำนวนตัวอักษรรวมไม่เกิน 80 ตัวอักษร หามีความจำเป็นต้องยาวกว่านั้นแนะนำให้ขึ้นบรรทัดใหม่
    •         
    • ที่ท้ายบรรทัดของแต่ละแถวต้องไม่มีช่องว่าง (whitespace) ใดๆ
    •         
    • ใน 1 บรรทัดประกอบด้วย 1 คำสั่งเท่านั้น
    •     
        
  •     
  • ย่อหน้า     
              
    • ใช้ Space แทน Tab โดยมาตรฐานนี้แนะนำให้ใช้ 1 Tab = 4 Spaces สำหรับแต่ละย่อหน้า (Indent) เนื่องจาก Editor แต่ละตัวอาจมีการกำหนด จำนวน Space ต่อ Tab ไม่เท่ากัน
    •     
        
  •     
  • คีย์เวิร์ด และ True, False, Null     
              
    • คีย์เวิร์ดเป็นตัวพิมพ์เล็กเท่านั้น
    •         
    • true false และ null ก็ใช้ตัวพิมพ์เล็กเช่นกัน
    •     
        

Namespace และการประกาศตัวแปร

        
  • เว้น 1 บรรทัดหลังการประกาศ Namespaces
  •     
  • การประกาศตัวแปร ให้ทำหลังจากการประกาศ Namespaces แล้ว เท่านั้น
  •     
  • สามารถประกาศได้ 1 ตัวแปรต่อ 1 บรรทัดเท่านั้น
  •     
  • เว้น 1 บรรทัดหลังการประกาศ use (ในกรณีที่ประกาศ use หลายตัวให้รวมกลุ่มของ use เป็นกลุ่มเดียวกันและเว้น 1 บรรทัดหลังการใช้ use ตัวสุดท้าย)
<?php
namespace Vendor\Package;

use FooClass;
use BarClass as Bar;
use OtherVendor\OtherPackage\BazClass;

// ... additional PHP code ...
 

Classes, Properties, และ Methods

กฏนี้ใช้กับ classes, interfaces และ traiits ด้วย
        
  • Classes     
              
    • extends และ implements จะต้องประกาศในบรรทัดเดียวกันกับการประกาศ Classname
    •         
    • การเปิดปิดปีกกา {} ให้ขึ้นบรรทัดใหม่
              <?php
              namespace Vendor\Package;
              
              use FooClass;
              use BarClass as Bar;
              use OtherVendor\OtherPackage\BazClass;
              
              class ClassName extends ParentClass implements \ArrayAccess, \Countable
              {
                  // constants, properties, methods
              }
       
    •         
    • ถ้าจำเป็น รายการ implements แต่ละรายการสามารถขึ้นบรรทัดใหม่ได้ โดยให้ใส่ 1 ย่อหน้า (Indent) ก่อนคำสั่งแต่ละอัน
              <?php
              namespace Vendor\Package;
              
              use FooClass;
              use BarClass as Bar;
              use OtherVendor\OtherPackage\BazClass;
              
              class ClassName extends ParentClass implements
                  \ArrayAccess,
                  \Countable,
                  \Serializable
              {
                  // constants, properties, methods
              }
       
    •     
        
  •     
  • Properties     
              
    • Visibility (ได้แก่ public, private และ protected) ต้องอยู่ก่อน ชื่อ proprerty
    •         
    • ไม่ใช้ var เป็น proprerty
    •         
    • 1 แถว ต่อ 1 property เท่านั้น
    •         
    • ไม่สามารถมี _ (ขีดเส้นใต้) นำหน้าชื่อ property ได้
    •     
         <?php
        namespace Vendor\Package;
        
        class ClassName
        {
            public $foo = null;
        }
     
  •     
  • เมธอด     
              
    • Visibility (ได้แก่ public, private และ protected) ต้องอยู่ก่อน ชื่อเมธอด
    •         
    • ไม่สามารถมี _ (ขีดเส้นใต้) ในชื่อเมธอดได้
    •         
    • การเปิดปิดปีกกา {} ของเมธอด ให้ขึ้นบรรทัดใหม่
    •     
        <?php
        namespace Vendor\Package;
        
        class ClassName
        {
            public function fooBarBaz($arg1, &$arg2, $arg3 = [])
            {
                // method body
            }
        }
     
  •     
  • Method Arguments     
              
    • argument แต่ละรายการคั่นด้วยลูกน้ำ (,) และตามด้วยช่องว่าง 1 ช่อง (รายการสุดท้ายไม่ต้องมี)
    •         
    • argument ที่เป็น default จะต้องเอาไว้รายการหลังสุดเท่านั้น
    •     
        <?php
        namespace Vendor\Package;
        
        class ClassName
        {
        public function foo($arg1, &$arg2, $arg3 = [])
        {
            // method body
        }
        }
          
              
    • สามารถแบ่ง argument ออกเป็นหลายๆแถวได้ โดยให้ใส่ 1 ย่อหน้า (Indent) ก่อน argument แต่ละอัน
    •         
    • ถ้ามีการแบ่ง argument หลายๆแถว วงเล็บปิด และ ปีกกาเปิด จะอยู่ในบรรทัดถัดไป โดยมีช่องว่างหนึ่งช่องคั่น
    •     
        <?php
        namespace Vendor\Package;
        
        class ClassName
        {
            public function aVeryLongMethodName(
                ClassTypeHint $arg1,
                &$arg2,
                array $arg3 = []
            ) {
                // method body
            }
        }
     
  •     
  • abstract, final, and static     
              
    • abstract และ final จะต้องอยู่ก่อน Visibility
    •         
    • static จะอยู่ถัดจาก Visibility
    •     
        <?php
        namespace Vendor\Package;
        
        abstract class ClassName
        {
            protected static $foo;
        
            abstract protected function zim();
        
            final public static function bar()
            {
                // method body
            }
        }
     
  •     
  • การเรียกใช้ เมธอดและฟังก์ชั่น     
              
    • ไม่ต้องมีช่องว่างระหว่างชื่อฟังก์ชั่นและวงเล็บเปิด
    •         
    • ไม่ต้องมีช่องว่างถัดจากวงเล็บเปิด และ ก่อนวงเล็บปิด
    •         
    • คั่นแต่ละ argument  ด้วยลูกน้ำ (,) ตามด้วยช่องว่าง 1 ช่อง (รายการสุดท้ายไม่ต้องมี)
              <?php
              bar();
              $foo->bar($arg1);
              Foo::bar($arg2, $arg3);
       
    •         
    • สามารถแยกรายการ argument ออกเป็นบรรทัดได้เช่นกัน
              <?php
              $foo->bar(
                  $longArgument,
                  $longerArgument,
                  $muchLongerArgument
              );
    •     
        

ผู้เขียน Goragod

โพสต์เมื่อ 20 ก.ค. 2558 เวลา 07:47 น.

ความคิดเห็น 0

เปิดดู 1,484

ป้ายกำกับ PSR

Related

^