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!