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
}
}