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.
Tantangan
MudahMari 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 classVisitoryang melacak pengunjung satu per satu dan menyimpan jumlah total pengunjung. Setiap pengunjung harus memiliki property$namesendiri (property instance), sedangkan property$totalVisitorsharus digunakan bersama oleh semua instance (property statis). Constructor menerima nama, menetapkannya, lalu menambahkan jumlah total pengunjung. Tambahkan methodgetInfo()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 pemanggilangetInfo()untuk setiap pengunjung (masing-masing pada baris tersendiri), lalu cetak jumlah total pengunjung dengan mengakses property statis langsung dari class menggunakanVisitor::$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
?>Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
File EksternalPengenalan OOPclass vs objectKata Kunci $thismethodpropertyConstructor (__construct)Destructor (__destruct)Ringkasan: Kalkulator Sederhana4Pewarisan
Pewarisan DasarKata Kunci parent::Penimpaan methodKata Kunci finalClass AbstrakRingkasan: Hierarki Karyawan7Enkapsulasi
Public, Protected, PrivateModifier Akses secara MendalamGetter dan SetterPenyembunyian InformasiPromosi Constructor (8.0)Ulasan: Sistem Catatan Siswa2Namespace dan Autoloading
Pengenalan NamespaceKata Kunci useStandar Autoloading PSR-4Autoloader ComposerRingkasan: Proyek yang Terorganisasi5Interface dan Kontrak
Pengenalan InterfaceMengimplementasikan InterfaceImplementasi Beberapa InterfaceInterface vs Abstract ClassPetunjuk Tipe dengan InterfaceRekap: Kalkulator Bentuk8Magic Methods
Pengantar Magic Methods__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Cloning Object__serialize & __unserializeRingkasan: Koleksi Kustom11Sistem Tipe Data dan Penanganan Error
Deklarasi TipeTipe NullableTipe Union dan IntersectionClass ExceptionHierarki Exception KustomTry, Catch, FinallyRekap: Validator Form3Property dalam class
Property instance vs staticKonstanta dalam classMethod & property staticProperty private & protectedProperty readonly (PHP 8.1)Ulasan: Pengelola Rekening Bank6Polimorfisme
Meninjau Kembali Method OverridingPolimorfisme melalui AntarmukaPetunjuk Tipe dan Tipe UnionPengikatan Statis TertundaRangkuman: Pemroses PembayaranLatihan sendiri: Compiler PHP online