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