Static Method & Property

"Milik Bersama, Tanpa Perlu Instansiasi"

Object-Oriented Programming (OOP) PHP

Pertemuan 9

Tujuan Pembelajaran

  • Mahasiswa memahami perbedaan fundamental antara Instance/Object (milik individu) dan Static (milik kelas/bersama).
  • Mahasiswa mampu mendeklarasikan dan memanggil Static Property dan Static Method di PHP menggunakan Scope Resolution Operator (::).
  • Mahasiswa memahami aturan ketat (batasan) penggunaan Static.
  • Mahasiswa mengetahui kapan waktu yang tepat mengimplementasikan konsep Static dalam pengembangan sistem skala nyata.

Masalah Dunia Nyata & Analogi

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.

πŸ’‘ Analogi: Buku Catatan vs Papan Pengumuman
πŸ““ Properti Biasa (Instance)

Buku Catatan Siswa: Milik individu. Jika Andi menulis di bukunya, buku Budi tidak akan berubah.

πŸ“Œ Static Property (Class)

Papan Pengumuman: Milik bersama (kelas). Semua siswa melihat informasi yang persis sama.

Konsep Utama Static

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.

Karakteristik Utama:

  • Tidak Butuh Instansiasi: Anda bisa memanggilnya secara langsung tanpa harus membuat objek (tanpa keyword new).
  • Memory Shared: Nilai dari static property dibagikan (shared) ke seluruh objek yang berasal dari class yang sama.
  • Scope Resolution Operator: Menggunakan titik dua ganda :: (dibaca: Paamayim Nekudotayim di PHP) untuk mengaksesnya.

Deklarasi & Implementasi di PHP

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();

Perbandingan: Regular vs Static

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

Aturan Emas (Hal Terlarang) β›”

Kekuatan Static datang dengan batasan ketat. PHP akan menghasilkan Fatal Error jika Anda melanggar dua aturan ini:

1. DILARANG menggunakan `$this` di dalam Static Method
Karena static method bisa dipanggil tanpa membuat objek, variabel pseudo $this (yang berarti "objek saya saat ini") tidak memiliki wujud/referensi.
2. Static Method TIDAK BISA mengakses Non-Static Property
Method yang berstatus static HANYA diperbolehkan mengakses properti yang juga static, atau memanggil method lain yang juga static.

Kapan Menggunakannya? (Simulasi)

Gunakan Static untuk Utility/Helper Classes (misal: Math::pi()) atau Class Counter.

Simulasi Static Counter

Klik tombol di bawah untuk mensimulasikan script PHP yang memanggil instance vs static class.

Output console PHP akan muncul di sini...

Source Code Logika Simulasi

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);
});

Kesimpulan

"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."