Dalam lanjutan tutorial belajar OOP PHP kali ini, kita akan mempelajari tentang Pengertian Static Property dan Static Method dalam Pemrograman Objek, kemudian kita akan melihat cara penggunaannya di dalam PHP.
Pengertian Static Property dan Static Method
Jika di awal tutorial Pemrograman objek PHP ini saya menjelaskan bahwa seluruh property dan method hanya bisa diakses dari objek, maka static property dan static method adalah pengecualiannya.
Static property dan static method adalah property (variabel) dan method (function) yang melekat kepada class, bukan kepada objek. Konsep static property memang 'agak keluar' dari konsep objek sebagai tempat melakukan proses, karena sebenarnya class hanya merupakan 'blueprint' saja.
Untuk membuat static property dan static method, kita menambahkan keyword 'static' setelah penulisan akses level property atau method, seperti contoh berikut:
// static property public static $harga_beli; // static method public static function beli_laptop() { //...isi method }
Dalam contoh diatas, saya menggunakan hak akses public, tetapi kita juga bisa menggunakan hak akses lain seperti private dan protected untuk static property dan static method.
Karena static property dan static method adalah milik class, maka kita tidak perlu membuat objek untuk mengaksesnya, tapi langsung menyebutkan nama class dan menggunakan operator '::', berikut adalah contoh pengaksesan static property dan static method dari class laptop:
echo laptop::$harga_beli; echo laptop::beli_laptop();
Tutorial Cara Penggunaan Static Property dan Static Method
Agar lebih memahami cara penggunaan static property dan static method, langsung saja kita masuk ke dalam kode program:
<?php // buat class laptop class laptop {   public $merk;   public $pemilik;   // static property   public static $harga_beli;    //static method   public static function beli_laptop() {     return "Beli Laptop"; } }  // set static property laptop::$harga_beli=4000000;  // get static property echo "harga beli : Rp".laptop::$harga_beli;  echo "<br />";  // panggil static method echo laptop::beli_laptop(); ?>
Dalam kode diatas, saya membuat class laptop dengan 2 property 'biasa', 1 static property dan 1 static method. Perhatikan cara mengkases keduanya tanpa membuat objek.
Cara Mengakses Static Property dan Static Method Dari Class Itu Sendiri
Jika kita menggunakan variabel $this untuk mengakses property dan method 'normal' dari dalam class, maka untuk mengakses static property dan static method, kita menggunakan keyword "self::". Berikut contoh penggunaannya:
<?php // buat class laptop class laptop {   public $merk;   public $pemilik;   // static property   public static $harga_beli;    //static method   public static function beli_laptop() {     return "Beli laptop seharga Rp".self::$harga_beli; } }  // set static property laptop::$harga_beli=4000000;  // panggil static method echo laptop::beli_laptop(); ?>
Pada kode program PHP diatas, saya menggunakan perintah self::$harga_beli, untuk memanggil static property dari dalam class laptop itu sendiri.
Cara Mengakses Static Property dan Static Method Parent Class
Untuk class dengan penurunan (inheritance), kita bisa menggunakan keyword parent::nama_property dan parent::nama_method untuk mengakses static property dan static method dari parent class.
Misalnya class laptop adalah turunan dari class komputer, kita bisa menggunakan perintah parent::beli_komputer() untuk mengakses static method pada class komputer dari dalam class laptop.
Berikut adalah contoh pengaksesan static method milik parent class:
<?php // buat class komputer class komputer {    // protected static method   protected static function beli_komputer(){     return "Beli Komputer Baru";   } }  // turunkan class komputer ke class laptop class laptop extends komputer{    // private static method   private static function beli_laptop(){     return "Beli Laptop Baru";   }    // public static method   public static function beli_semua(){     echo parent::beli_komputer();     echo "<br />";     echo self::beli_laptop();   } }   // panggil static method laptop::beli_semua();  // coba panggil private static method // laptop::beli_laptop(); // Fatal error: Call to private method laptop::beli_laptop() ?>
Pada kode diatas, saya membuat class komputer dengan sebuah static method beli_komputer(). Method ini memiliki hak akses protected, sehingga hanya bisa diakses dari dalam class itu sendiri atau dari dalam class turunan.
Class komputer kemudian 'diturunkan' kepada class laptop. Di dalam class laptop, saya membuat dua buah static method. Static method beli_laptop() di set dengan hak akses private, sehingga tidak bisa diakses dari luar class laptop.
Dalam method beli_semua(), saya memanggil method beli_komputer() milik class komputer menggunakan perintah parent::beli_komputer(). Ini adalah cara pemanggilan static method milik parent class. Kemudian masih di dalam method beli_semua(), saya memanggil method beli_laptop() dengan perintah self::beli_laptop(), karena method ini ada di dalam class leptop itu sendiri.
Untuk menguji apakah method beli_semua() sukses dijalankan, saya kemudian memanggilnya dengan perintah laptop::beli_semua().
Perhatikan juga pada bagian komentar di akhir kode diatas. Jika kita mencoba memanggil method laptop::beli_laptop(), PHP akan mengeluarkan error karena method beli_laptop() memiliki hak akses private, sehingga tidak bisa diakses dari luar class.
Dalam membuat program berbasis objek, penggunaan static property (dan juga static method) sebaiknya dibatasi, karena static method cenderung susah dideteksi jika terjadi kesalahan. Namun konsep property dan method yang melekat kepada class ini banyak juga digunakan untuk membuat design pattern. Bahkan di dalam framework PHP seperti laravel, static method merupakan mekanisme utama untuk menjalankan sebagian besar kode program.
Dalam tutorial selanjutnya, kita akan mempelajari pengertian konstanta class dalam pemrograman objek.
Sangat membantu
mis gan mau nanya
itu kode static nya fungsi nya untuk apa?
saat saya coba hapus kode static nya, hasil nya sama aja gan?
trmksh
mungkin spaya bisa dipanggil tnpa gunaiin object kali ya :3.. *cmiiw
itu karena dari contoh di atas nilai yang dikembalikan oleh fungsinya berupa "string".
dari fungsi beli_komputer() dan juga fungsi beli_laptop() semuanya nilai yang dikembalikan adalah "string".
jadi kalau ditampilkan dengan "scope resolution operator" (::)
laptop::beli_semua();
maka hasilnya nggak akan berubah walaupun static di fungsi telah dihapus.
untuk pembuktiannya coba buat sebuah properti biasa,
*cth : public $merek = "Asus";
setelah itu, propertinya dimasukan kedalam fungsi beli_komputer(),
*cth : private static function beli_komputer(){
return "Beli Laptop Baru".$this->merek;
}
kalau sudah, coba dijalankan, maka hasilnya pasti error.
soalnya nilai yang dikembalikan oleh fungsi beli_komputer() bukan lagi "string", tapi "string"+objek.
selanjutnya kalau nggak mau error, kamu harus paham apa itu property biasa, method biasa, dan properti static dan juga method static dan juga bagaimana cara mengakses nya.
mungkin itu jawaban sederhana dari saya, semoga bermanfaat.
Terimakasih tambahannya… :)
tutornya sangat membantu gan
maksih bgt gan
Gan, itu saya coba kok gak error bisa2 aja tuh gak ada private dianggap error, mungkin sudah dipanggil di method public beli_semua() jadi gak error tuh
Errornya baru keluar ketika kode laptop::beli_laptop(); dihapus komentarnya gan. Di dalam kode diatas sengaja saya tambah komentar '//' agar tidak error, tapi ketika dihapus, baru keluar pesan "Fatal error: Call to private method laptop::beli_laptop()"
Penjelasannya mudah dipahami, sangat membantu..
Thanks
Sama2 gan, semoga bisa bermanfaat :)
Ass. Saya sudah mencoba banyak belajar WEB dan OOP-PHP dari Web ini (duniailkom), ternyata ini sangat bagus dan bermanfaat bagi saya. Selamat duniailkom atas kebaikan-kebaikan web ini, teruskan!
pengunaan static property dan method ini bisa dipanggil tanpa mengcreate objek ya mas?
cocok digunakan untuk pemanggilan yg sifatnya tidak berulang alias single kyny ya
saya baru ngeh setelah baca artikel ini 3x ha2..
Iya mas, tp beberapa sumber mengatakan kalau static property dan static method ini menyalahi aturan OOP. Karena seharusnya di OOP setiap property dan method harus diakses dari objek, bukan langsung ke class :)
kalau dicampur dengan property biasa gimana cara memanggilnya mas ?
<?php
class komputer
{
public $pemilik;
public $merk;
public static $waktu;
public static function pinjam()
{
return "Pinjam Laptop $this->merk milik $this->pemilik".self::$waktu;
}
}
$laptop = new komputer();
$laptop->pemilik="Anda";
$laptop->merk="Acer";
komputer::$waktu="sekarang";
echo komputer::pinjam();
?>
result >> Fatal error: Using $this when not in object context in C:\xampp\htdocs\learnPHP\static-property-and-method.php on line 10
Kan pake static jangan pake $this. Pake self dong mas bro karna property nya itu ada di dalam class itu sendiri. Kalau manggilnya di class turunan, pake parent.
Agan dede memakai $this karena property tersebut tidak memakai static, namun saya coba saran agan asdasd untuk memakai self:: pun tidak bisa. Sepertinya memang property tanpa static tidak bisa dipanggil jika tidak membuat objek terlebih dahulu.
Iya gan malik. soalnya kan $this itu merujuk ke Object jadi harus buat objectnya dulu kalau mau pakai $this.
Ane bingung juga.. kapan menggunakan static kpan tidak.. gmn kalo semuanya pake static.. apa ada masalah ?
Di artikel ini kita hanya membahas cara penulisan dari static property dan method.
Mengenai kapan harus dipakai, itu tergantung situasi dan aplikasi yang akan dirancang. Di dalam konsep pemrograman OOP, ada lagi materi yang dinamakan "design pattern". Di dalam Design Pattern inilah nantinya akan dibahas jenis2 penerapan dari static property dan static method, dan dalam situasi kapan sebaiknya digunakan.
design pattern itu maksudnya gimana yha gan?
Sederhananya design pattern itu "kumpulan aturan penulisan struktur OOP". Contohnya bagaimana membuat sebuah class yang hanya bisa diturunkan 1 kali saja, atau membuat class yang hanya bisa memiliki 1 object saja. Materi ini termasuk cukup rumit dipelajari…
Mas…untuk penulisan key SELF di dalam tanda " " giman ya
Misalnya,
Return "harga laptop (key SELF) rupiah";
Setahu saya tidak bisa, harus dipisah ke luar string, seperti:
"Beli laptop seharga Rp".self::$harga_beli;
Bagus banget artikel2nya tentang oop php.
saya baca dari awal sampai part akhir gak sampai setengah jam langsung paham :)
Siip, semoga bisa bermanfaat…
// public static method
public static function beli_semua(){
echo parent::beli_komputer();
echo "<br />";
echo self::beli_laptop();
}
}
// panggil static method
laptop::beli_semua();
kenapa ga langsung aja
parent::beli_komputer();
echo "<br />";
self::beli_laptop();
//panggil method
echo laptop::beli_semua();
?>.
kenapa harus pakai echo dimethod?
mohon dijawab, karena masih bingung kenapa harus pakai echo. Terimakasih.
Penggunaan echo di method hanya untuk menyederhanakan contoh saja dan itu tidak harus.
Idealnya di setiap function (termasuk method), tidak di echo langsung, tapi cukup mengembalikan nilai dengan perintah return.
Banyak yang bilang static sulit untuk diuji, maksudnya gimana ya, Mas?