Collections & Modern PHP — PHP

PHP modern (8.x) punya banyak fitur yang membuat kode lebih bersih. Named arguments (PHP 8.0): function createUser(string $name, string $email, string $role = "

PHP modern (8.x) punya banyak fitur yang membuat kode lebih bersih.

Named arguments (PHP 8.0):

function createUser(string $name, string $email, string $role = "user") { ... }

// Sebelum: harus ingat urutan
createUser("Budi", "[email protected]", "admin");

// PHP 8: pakai nama parameter
createUser(name: "Budi", email: "[email protected]", role: "admin");

Match expression (PHP 8.0):

$label = match($status) {
    "active" => "Aktif",
    "inactive" => "Nonaktif",
    "banned" => "Diblokir",
    default => "Tidak diketahui",
};

Null safe operator (PHP 8.0):

// Sebelum
$country = null;
if ($user !== null && $user->address !== null) {
    $country = $user->address->country;
}

// PHP 8
$country = $user?->address?->country;

Enum — Backed Enum dasar (PHP 8.1):

// Backed enum: setiap case punya nilai primitif (string atau int)
enum Status: string {
    case Active = "active";
    case Inactive = "inactive";
    case Banned = "banned";
}

$status = Status::Active;
echo $status->value;  // "active" — ambil nilai backed

// Convert dari string ke enum
$dari = Status::from("active");         // Status::Active
$coba = Status::tryFrom("xxx");         // null (tidak throw)

Gunakan backed enum kalau nilai case perlu disimpan di DB atau di JSON.

Enum dengan method:

enum Status: string {
    case Active = "active";
    case Inactive = "inactive";
    case Banned = "banned";

    public function label(): string {
        return match($this) {
            self::Active => "Aktif",
            self::Inactive => "Nonaktif",
            self::Banned => "Diblokir",
        };
    }

    public function isBlocked(): bool {
        return $this === self::Banned;
    }
}

$status = Status::Active;
echo $status->label(); // "Aktif"

Enum boleh punya method, constant, dan implement interface — jauh lebih aman daripada string sembarang.

Readonly properties (PHP 8.1):

class User {
    public function __construct(
        public readonly string $name,
        public readonly string $email,
    ) {}
}

$user = new User("Budi", "[email protected]");
$user->name = "Andi"; // ERROR! Readonly!

Yang akan kamu pelajari