Coding Style Guide PSR-2 ตอนที่ 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
}
<?php
for ($i = 0; $i < 10; $i++) {
// for body
}
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
    }
}