GORAGOD.com

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

มาต่อกันด้วยข้อกำหนดอื่นๆตามมาตรฐาน PSR-2 กันเลย
 

Control Structures

  • มีช่องว่าง 1 ตัวอักษรต่อจากคีย์เวิร์ด
  • ไม่ต้องมีช่องว่างต่อจาก ปีกกาเปิด {
  • ไม่ต้องมีช่องว่าง ก่อนปีกกาปิด }
  • มีช่องว่าง 1 ตัวอักษรระหว่าง วงเล็บปิด และ ปิกกาเปิด ) {
  • เยื้อง (Indent) ไปยังลำดับถัดไป ภายในโครงสร้างของคำสั่ง
  • ปีกกาปิดต้องขึ้นบรรทัดใหม่

if, elseif, else

<?php
if ($expr1) {
    // โครงสร้าง if body
} elseif ($expr2) {
    // โครงสร้าง elseif body
} else {
    // โครงสร้าง else body;
}
 

switch, case

<?php
switch ($expr) {
    case 0:
        echo 'First case, with a break';
        break;
    case 1:
        echo 'Second case, which falls through';
        // no break
    case 2:
    case 3:
    case 4:
        echo 'Third case, return instead of break';
        return;
    default:
        echo 'Default case';
        break;
}
 

while, do while

<?php
while ($expr) {
    // structure body
}
// หรือ
do {
    // structure body;
} while ($expr);
 

for

<?php
for ($i = 0; $i < 10; $i++) {
    // for body
}

 

foreach

<?php
foreach ($iterable as $key => $value) {
    // foreach body
}
 

try, catch

<?php
try {
    // try body
} catch (FirstExceptionType $e) {
    // catch body
} catch (OtherExceptionType $e) {
    // catch body
}
 

Closures

  • Closures จะต้องประกาศโดยมีช่องว่างต่อจาก คีย์เวิร์ด function 1 ตัวอักษร 
  • หากมีการใช้คีย์เวิร์ด use จะต้องเว้นช่องว่างด้านหน้าและด้านหลัง use 1 ตัวอักษรด้วยเช่นกัน
  • ปีกกาเปิด { จะอยู่บรรทัดเดียวกันกับการประกาศฟังก์ชั่น
  • ปีกกาปิด } จะต้องขึ้นบรรทัดใหม่เสมอ
  • arguments แต่ละรายการคั่นด้วยลูกน้ำ (,) และตามด้วยช่องว่าง 1 ตัวอักษร ยกเว้นรายการสุดท้าย
  • รายการที่เป็น default ต้องอยู่รายการสุดท้ายเสมอ
    <?php
    $closureWithArgs = function ($arg1, $arg2) {
        // body
    };

    $closureWithArgsAndVars = function ($arg1, $arg2) use ($var1, $var2) {
        // body
    };
     
  • arguments สามารถขึ้นบรรทัดใหม่ได้ เช่นเดียวกันกับเมธอดของคลาส
    <?php
    $longArgs_noVars = function (
        $longArgument,
        $longerArgument,
        $muchLongerArgument
    ) {
        // body
    };

    $noArgs_longVars = function () use (
        $longVar1,
        $longerVar2,
        $muchLongerVar3
    ) {
        // body
    };

    $longArgs_longVars = function (
        $longArgument,
        $longerArgument,
        $muchLongerArgument
    ) use (
        $longVar1,
        $longerVar2,
        $muchLongerVar3
    ) {
        // body
    };

    $longArgs_shortVars = function (
        $longArgument,
        $longerArgument,
        $muchLongerArgument
    ) use ($var1) {
        // body
    };

    $shortArgs_longVars = function ($arg) use (
        $longVar1,
        $longerVar2,
        $muchLongerVar3
    ) {
        // body
    };
     
  • รูปแบบนี้ใช้ได้เช่นเดียวกันกับ closure ที่อยู่ภายในฟังก์ชั่น
    <?php
    $foo->bar(
        $arg1,
        function ($arg2) use ($var1) {
            // body
        },
        $arg3
    );

ตัวอย่าง:
<?php
namespace Vendor\Package;

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

class Foo extends Bar implements FooInterface
{
    public function sampleFunction($a, $b = null)
    {
        if ($a === $b) {
            bar();
        } elseif ($a > $b) {
            $foo->bar($arg1);
        } else {
            BazClass::bar($arg2, $arg3);
        }
    }

    final public static function bar()
    {
        // method body
    }
}
 
สำหรับใครที่ใช้ netbeans 8.0.2 สามารถดาวน์โหลดการตั้งค่า Formatter ที่ผมใช้ได้ที่ลิงค์นี้ netbeans.zip  (2)