Menu
CoddyTech

Property instance vs static

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 15 dari 91.

Saat kamu membuat property di dalam class, kamu perlu menentukan apakah property tersebut dimiliki oleh setiap object secara terpisah atau oleh class itu sendiri. Perbedaan ini membedakan property instance dan property statis.

property instance adalah pilihan default. Setiap object memiliki salinan property sendiri, dan mengubahnya pada satu object tidak memengaruhi object lainnya:

<?php
class User {
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
    }
}

$alice = new User("Alice");
$bob = new User("Bob");

echo $alice->name . "\n";
echo $bob->name . "\n";

Keluaran:

Alice
Bob

Property static dimiliki oleh class, bukan object tertentu. Kamu mendeklarasikannya dengan kata kunci static dan mengaksesnya menggunakan nama class dengan ::, bukan menggunakan object dengan ->:

<?php
class User {
    public static $count = 0;
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
        self::$count++;
    }
}

$alice = new User("Alice");
$bob = new User("Bob");

echo User::$count;

Output:

2

Perhatikan bahwa $count digunakan bersama oleh semua instance. Setiap kali kita membuat User baru, variabel $count yang sama bertambah. Di dalam class, kita menggunakan self::$count untuk merujuk ke property statis.

Poin Utama: Gunakan property instance saat setiap object membutuhkan nilainya sendiri. Gunakan property static saat kamu perlu membagikan data ke semua object dari sebuah class, misalnya untuk menghitung instance atau menyimpan konfigurasi.

challenge icon

Tantangan

Mudah

Mari buat sistem pelacakan pengunjung yang menunjukkan perbedaan antara property instance (unik untuk setiap pengunjung) dan property statis (digunakan bersama oleh semua pengunjung).

Kamu akan membuat dua file untuk mengatur kodemu:

  • Visitor.php: Definisikan class Visitor yang melacak pengunjung satu per satu dan menyimpan jumlah total pengunjung. Setiap pengunjung harus memiliki property $name sendiri (property instance), sedangkan property $totalVisitors harus digunakan bersama oleh semua instance (property statis). Constructor menerima nama, menetapkannya, lalu menambahkan jumlah total pengunjung. Tambahkan method getInfo() yang mengembalikan "[name] is visitor #[totalVisitors]".
  • main.php: Sertakan file class Visitor, lalu buat tiga pengunjung dengan nama "Alice", "Bob", dan "Charlie" (dalam urutan tersebut). Setelah membuat ketiganya, cetak hasil pemanggilan getInfo() untuk setiap pengunjung (masing-masing pada baris tersendiri), lalu cetak jumlah total pengunjung dengan mengakses property statis langsung dari class menggunakan Visitor::$totalVisitors.

Ingat, di dalam class, kamu mengakses property statis menggunakan self::$propertyName, sedangkan dari luar class kamu menggunakan ClassName::$propertyName. Property instance diakses dengan $this->propertyName seperti biasa.

Outputmu harus menampilkan setiap pengunjung beserta nomor yang ditetapkan kepadanya, diikuti jumlah total akhir pada baris terakhir.

Coba sendiri

<?php
// Sertakan class Visitor
require_once 'Visitor.php';

// TODO: Buat tiga pengunjung bernama "Alice", "Bob", dan "Charlie" (sesuai urutan tersebut)

// TODO: Cetak hasil getInfo() untuk setiap pengunjung (masing-masing pada baris terpisah)

// TODO: Cetak jumlah total pengunjung menggunakan Visitor::$totalVisitors
?>
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler PHP online