"Milik Bersama, Tanpa Perlu Instansiasi"
Object-Oriented Programming (OOP) PHP
Pertemuan 9
Bayangkan kita punya Class Mahasiswa dan kita ingin menghitung sudah berapa banyak objek Mahasiswa yang berhasil dibuat?
Jika menggunakan properti biasa (Non-Static), setiap kali kita melakukan new Mahasiswa(), variabel perhitungan akan dibuat ulang dari nol untuk objek tersebut. Kita butuh sebuah tempat "penyimpanan global" yang membagikan datanya ke semua objek.
Buku Catatan Siswa: Milik individu. Jika Andi menulis di bukunya, buku Budi tidak akan berubah.
Papan Pengumuman: Milik bersama (kelas). Semua siswa melihat informasi yang persis sama.
Dalam Object-Oriented Programming (OOP), Static Method dan Static Property adalah atribut atau perilaku yang terikat langsung pada Class itu sendiri, BUKAN pada instance/objek hasil instansiasi.
new).:: (dibaca: Paamayim Nekudotayim di PHP) untuk mengaksesnya.Tambahkan keyword static setelah visibility (public/protected/private). Gunakan self:: untuk memanggil dari dalam class.
class Mahasiswa { // Static Property public static $total_mhs = 0; public function __construct() { // Memanggil property static dari dalam class self::$total_mhs++; } // Static Method public static function tampilkanTotal() { echo "Total: " . self::$total_mhs; } } // Memanggil dari LUAR class (Tanpa keyword 'new') echo Mahasiswa::$total_mhs; // Output: 0 // Memanggil Method Static Mahasiswa::tampilkanTotal();
| Aspek | Regular (Non-Static) | Static |
|---|---|---|
| Kepemilikan | Milik Objek (Instance) | Milik Kelas (Class) |
| Sintaks Luar | $objek->namaMethod() |
NamaClass::namaMethod() |
| Sintaks Dalam | $this->namaMethod() |
self::namaMethod() |
| Instansiasi | WAJIB menggunakan new |
TIDAK PERLU new |
| Berbagi Data | Data independen (berbeda tiap objek) | Data dibagikan ke semua objek kelas tersebut |
Kekuatan Static datang dengan batasan ketat. PHP akan menghasilkan Fatal Error jika Anda melanggar dua aturan ini:
$this (yang berarti "objek saya saat ini") tidak memiliki wujud/referensi.
Gunakan Static untuk Utility/Helper Classes (misal: Math::pi()) atau Class Counter.
Klik tombol di bawah untuk mensimulasikan script PHP yang memanggil instance vs static class.
Output console PHP akan muncul di sini...
let totalMhs = 0; // Variabel global bertindak sebagai static // Listener untuk Instansiasi document.getElementById('btnBuatObjek').addEventListener('click', () => { totalMhs++; // Mirip dengan eksekusi self::$total_mhs++ di constructor cetak("> new Mahasiswa(); β self::$total_mhs dinaikkan: " + totalMhs); }); // Listener untuk Static Echo document.getElementById('btnCetakStatic').addEventListener('click', () => { // Mengakses properti global tanpa keyword 'new' cetak("> echo Mahasiswa::$total_mhs; β " + totalMhs); });
"Regular OOP memberikan kita kebebasan untuk menciptakan banyak wujud (objek) dengan datanya masing-masing. Namun, Static Method & Property hadir sebagai 'pusat komando'βmemberikan efisiensi dan titik kumpul informasi tanpa terikat oleh wujud objek mana pun."