Learn
← Previous Next →

Hari 21: Readonly, Fibers & PHP 8.3

55 min Last updated 09 Apr 2026

Readonly Properties (PHP 8.1)

class Point {
    public function __construct(
        public readonly float $x,
        public readonly float $y,
    ) {}
}

$p = new Point(3.0, 4.0);
echo $p->x; // 3
// $p->x = 5; // Error: Cannot modify readonly property

Readonly Class (PHP 8.2)

readonly class Koordinat {
    public function __construct(
        public float $lat,
        public float $lng,
    ) {}

    public function jarak(Koordinat $other): float {
        return sqrt(($this->lat - $other->lat) ** 2 + ($this->lng - $other->lng) ** 2);
    }
}

$a = new Koordinat(-6.2, 106.8); // Jakarta
$b = new Koordinat(-7.8, 110.4); // Yogyakarta
echo round($a->jarak($b), 2);    // 3.97 (unit derajat)

First-class Callable (PHP 8.1)

// Sebelum: closure wrapper
$strlen  = Closure::fromCallable("strlen");
// Sekarang: langsung dengan ...
$strlen  = strlen(...);
$strtoup = strtoupper(...);

$kata = ["hello", "world", "php"];
$panjang = array_map($strlen, $kata);  // [5, 5, 3]
$upper   = array_map($strtoup, $kata); // ["HELLO","WORLD","PHP"]

💡 Notice: readonly class membuat semua propertinya readonly secara otomatis. Ini berguna untuk value objects yang immutable.

Assignment

Buat readonly class Produk dengan constructor(string $nama, float $harga, int $stok). Tambahkan method totalNilai(): float yang return harga * stok. Buat 2 produk dan tampilkan nama + totalNilai (2 desimal).

Expected output:

Laptop: Rp 42,500,000.00
Mouse: Rp 3,000,000.00
PHP index.php
Solution
Output