ชีตสรุป PHP
ข้อมูลอ้างอิง PHP 8.3+ ที่ค้นหาและพิมพ์ได้ — ไวยากรณ์ สตริง อาร์เรย์ ฟังก์ชัน คลาส enums แอตทริบิวต์ และฟีเจอร์สมัยใหม่ ฟรี
พื้นฐานและชนิดข้อมูล
10declare(strict_types=1);
บังคับตรวจชนิด scalar แบบเข้มงวด
$x = 1;
ตัวแปรขึ้นต้นด้วยเครื่องหมายดอลลาร์
const MAX = 100;
ค่าคงที่ ณ เวลาคอมไพล์
gettype($x)
หาชนิดของค่า
(int) $x
แปลงเป็นจำนวนเต็ม
is_int($x)
ตัวช่วยตรวจชนิด (is_string, ...)
int|string $x
การประกาศชนิด union
?string $x
ชนิด nullable (string หรือ null)
$a ?? 'default'
ตัวดำเนินการ null coalescing
$a ??= 'default'
กำหนดค่าเฉพาะเมื่อเป็น null
สตริง
11"Hello $name"
อัญประกาศคู่แทรกค่าตัวแปร
'literal $x'
อัญประกาศเดี่ยวเป็นค่าตามตัวอักษร
$a . $b
เชื่อมสตริง
strlen($s)
ความยาวไบต์ของสตริง
str_contains($s, 'a')
ตรวจหาสตริงย่อย
str_starts_with($s, 'a')
ตรวจคำนำหน้า
substr($s, 0, 3)
ดึงส่วนหนึ่งของสตริง
str_replace('a', 'b', $s)
แทนที่ทุกตำแหน่งที่พบ
explode(',', $s)
แยกเป็น array
sprintf('%05.2f', $n)
ผลลัพธ์สตริงที่จัดรูปแบบ
trim($s)
ตัดช่องว่างรอบข้าง
อาร์เรย์
11$a = [1, 2, 3];
ค่า array แบบมีดัชนี
$a = ['k' => 'v'];
อาร์เรย์แบบ associative
array_map(fn($x) => $x * 2, $a)
แปลงแต่ละสมาชิก
array_filter($a, fn($x) => $x > 0)
เก็บสมาชิกที่ตรงเงื่อนไข
array_reduce($a, $fn, 0)
ลดเหลือค่าเดียว
in_array($v, $a, true)
ตรวจค่าแบบเข้มงวด
array_keys($a)
เอาคีย์ทั้งหมด
array_merge($a, $b)
รวม array
[...$a, ...$b]
กระจาย/รวม array
count($a)
จำนวนสมาชิก
[$x, $y] = $a;
การแยกโครงสร้าง array
ฟังก์ชัน
9function f(int $a): int {}
พารามิเตอร์และค่าคืนแบบระบุชนิด
function f(int $a = 1) {}
ค่าพารามิเตอร์เริ่มต้น
function f(int ...$nums) {}
พารามิเตอร์แบบ variadic
f(...$args)
กระจายอาร์กิวเมนต์
f(name: 'Sam', age: 30)
อาร์กิวเมนต์แบบมีชื่อ
$fn = fn($x) => $x + 1;
Arrow function (จับขอบเขตอัตโนมัติ)
function () use ($x) {}
Closure ที่จับตัวแปร
$fn = strlen(...);
ไวยากรณ์ callable ระดับเฟิร์สต์คลาส
function f(): never {}
ไม่คืนค่าเลย (โยนข้อผิดพลาดหรือออก)
การควบคุมการทำงาน
9if ($a) {} elseif ($b) {} else {}
การแยกตามเงื่อนไข
$a ? $b : $c
นิพจน์ ternary
$a ?: $b
ternary แบบสั้น (สำรองเมื่อ falsy)
match ($x) { 1, 2 => 'a', default => 'b' }
match แบบเข้มงวดอิงนิพจน์
switch ($x) { case 1: break; }
การแยกหลายทางแบบหลวม
foreach ($a as $k => $v) {}
วนคีย์และค่า
for ($i = 0; $i < 10; $i++) {}
ลูปแบบนับรอบ
while ($cond) {}
วนซ้ำขณะเงื่อนไขเป็นจริง
break / continue
ออกหรือข้ามรอบวนซ้ำ
คลาสและ OOP
10class A extends B implements C {}
การสืบทอดและอินเทอร์เฟซ
public function __construct(private int $id) {}
การเลื่อนพร็อพเพอร์ตีใน constructor
public readonly string $name;
เปลี่ยนแปลงไม่ได้หลังกำหนดค่าเริ่มต้น
public function f(): static {}
คืนชนิดแบบ late-bound
static::create()
Late static binding
$obj?->method()
การเรียกเมธอดแบบ null-safe
abstract class A {}
สร้างอินสแตนซ์โดยตรงไม่ได้
trait T {} use T;
โค้ดที่นำกลับมาใช้ซ้ำได้แนวขวาง
$obj instanceof A
ตรวจชนิด ณ เวลารัน
A::class
สตริงชื่อคลาสแบบเต็ม
Enums
9enum Status { case Active; case Draft; }
การแจงนับล้วน
enum Status: string { case A = 'a'; }
Backed enum (string/int)
Status::Active
อ้างอิงเคสของ enum
Status::from('a')
สร้างจากค่า backing
Status::tryFrom('x')
คืน null ถ้าไม่ถูกต้อง
Status::cases()
array ของทุกเคส
$status->value
ค่า backing ของเคส
$status->name
ชื่อของเคส
enum E { public function label() {} }
Enum มีเมธอดได้
การจัดการข้อผิดพลาด
9try {} catch (Throwable $e) {}
ดักจับ error และ exception
catch (TypeError | ValueError $e)
ดักจับหลายชนิด
catch (Exception)
catch แบบไม่เก็บค่า (ไม่มีตัวแปร)
finally {}
ทำงานเสมอหลัง try/catch
throw new RuntimeException('x')
โยน exception
throw $e;
โยน exception ที่ดักไว้ซ้ำ
$x = $v ?? throw new Error();
โยนเป็น expression
$e->getMessage()
อ่านข้อความ error
$e->getPrevious()
ดึง exception ที่เชื่อมโยง
Attributes และฟีเจอร์ใหม่
9#[Attribute] class Route {}
ประกาศ attribute เอง
#[Route('/home')]
ใส่ attribute ให้เป้าหมาย
new ReflectionClass($x)
ตรวจสอบคลาสด้วย reflection
$ref->getAttributes()
อ่าน attribute ที่ประกาศไว้
json_encode($data)
แปลงเป็น JSON
json_decode($s, true)
ถอด JSON เป็น array
array_is_list($a)
จริงถ้า key เป็น 0..n ตามลำดับ
str_word_count($s)
นับคำในสตริง
$obj::class
ชื่อคลาสจาก instance
ไม่มีรายการที่ตรงกับ “:q”
ต้องการความช่วยเหลือ?
พบปัญหากับเครื่องมือนี้หรือไม่? แจ้งทีมงานของเรา