Setelah dalam tutorial OOP PHP sebelumnya kita mempelajari tentang Pengertian Enkapsulasi Objek (Public, Protected dan Private), dalam tutorial kali ini kita akan membahas Pengertian dan Fungsi Variabel $this dalam Object Oriented Programming PHP.
Pengertian dan Fungsi Variabel $this dalam OOP
Variabel $this adalah sebuah variabel khusus dalam OOP PHP yang digunakan sebagai penunjuk kepada objek, ketika kita mengaksesnya dari dalam class. Dalam manual PHP, $this disebut dengan istilah: pseudo-variable.
Untuk lebih memudahkan pemahaman, kita akan bahas menggunakan contoh.
Berikut adalah class laptop dengan beberapa property dan method.
<?php  // buat class laptop class laptop {    // buat property untuk class laptop   public $pemilik;   public $merk;   public $ukuran_layar;    // buat method untuk class laptop   public function hidupkan_laptop() { return "Hidupkan Laptop";   }     public function matikan_laptop() { return "Matikan Laptop";   } }  // buat objek dari class laptop (instansiasi) $laptop_anto = new laptop(); $laptop_andi = new laptop(); ?>
Dalam kode di atas, saya membuat class laptop dengan 3 property, yakni: $pemilik, $merk dan $ukuran_layar. Ketiga property ini belum memiliki nilai. Di dalam class laptop juga terdapat 2 buah method, yakni hidupkan_laptop() dan matikan_laptop(), kedua method ini akan mengembalikan nilai string. Seluruh property dan method dari class laptop memiliki hak akses public, sehingga bisa diakses dari luar class.
Setelah membuat class, saya kemudian men-instansiasi-nya ke dalam 2 buah objek $laptop_anto dan $laptop_andi.
Jika anda menjalankan kode program di atas, di dalam web browser belum tampil apa-apa, karena saya belum memanggil method atau property apapun dari kedua objek.
Selanjutnya, saya ingin menambahkan isi property $pemilik kepada kedua objek, berikut adalah kode yang diperlukan:
$laptop_anto->pemilik = "Anto"; $laptop_andi->pemilik = "Andi";
Dengan perintah di atas, property $pemilik pada masing-masing objek telah berisi nilai. Untuk menampilkan nilai dari objek tersebut, kita tinggal mengaksesnya dengan kode berikut:
echo $laptop_anto->pemilik; // "Anto"
Sampai di sini, kita telah memahami cara mengakses property objek dari objek itu sendiri, yakni dengan menggunakan format:
$nama_objek->nama_property
Bagaimana jika property tersebut telah di-set nilainya dari dalam class? Berikut adalah perubahan class laptop:
<?php // buat class laptop class laptop {    // buat property untuk class laptop   public $pemilik="Andi";    // buat method untuk class laptop   public function hidupkan_laptop() { return "Hidupkan Laptop";   } }  // buat objek dari class laptop (instansiasi) $laptop_baru = new laptop(); $laptop_lama = new laptop(); ?>
Class laptop di atas saya revisi sehingga hanya memiliki 1 property dan 1 method. Perhatikan bahwa property $pemilik telah diisi pada level class, sehingga pada saat pembuatan objek (instansiasi), seluruh objek akan memiliki nilai ini.
Objek $laptop_baru dan $laptop_lama sama-sama berasal dari class laptop, dan nilai property $pemilik sama- sama berisi "Andi".
echo $laptop_baru->pemilik; // Andi echo $laptop_lama->pemilik; // Andi
Lebih jauh lagi, pemanggilan method juga akan menghasilkan nilai yang sama:
echo $laptop_baru->hidupkan_laptop(); // "Hidupkan Laptop" echo $laptop_lama->hidupkan_laptop(); // "Hidupkan Laptop"
Kita akan masuk ke dalam bagian terpenting. Bagaimana jika saya ingin ketika method hidupkan_laptop() dipanggil, yang akan ditampilkan adalah : "Hidupkan Laptop Andi"?
Apabila anda telah mempelajari dasar-dasar PHP, tentunya cara paling jelas adalah dengan mengubah return string di dalam method hidupkan_laptop() sebagai berikut:
public function hidupkan_laptop() { return "Hidupkan Laptop Andi"; }
Cara tersebut tidak salah, dan akan menghasilkan nilai "Hidupkan Laptop Andi" pada saat pemanggilan method hidupkan_laptop(). Tetapi, bukankah kita telah memiliki property $pemilik dengan nilai "Andi"? kita bisa menggunakan property ini dan menambahkannya ke dalam method hidupkan_laptop.
Untuk mencoba ide tersebut, silahkan ubah contoh class laptop sebelumnya menjadi berikut:
<?php // buat class laptop class laptop {    // buat property untuk class laptop   public $pemilik="Andi";   public $merk;    // buat method untuk class laptop   public function hidupkan_laptop() { return "Hidupkan Laptop $pemilik";   } }  // buat objek dari class laptop (instansiasi) $laptop_baru = new laptop();  echo $laptop_baru->hidupkan_laptop(); // "Hidupkan Laptop" ?>
Jika anda menjalankan kode di atas, hasil yang didapat adalah:
Notice: Undefined variable: pemilik in D:\xampp\htdocs\oop_php\belajar_objek.php on line 11 Hidupkan Laptop
Dari penjelasan error PHP, dinyatakan bahwa "variabel pemilik tidak terdefinisi pada baris 11". Baris tersebut adalah baris dimana kita menampilkan "Hidupkan Laptop $pemilik" dengan method hidupkan_laptop().
Apa yang terjadi? Bukankah $pemilik="Andi" telah terdefinisi pada property class?
Inilah yang dimaksud dalam awal tutorial kali ini, kita sedang mencoba mengakses property objek dari dalam class. Jika anda bingung dengan pengertian ini, anda tidak sendiri. Saya juga kesulitan dalam memahami konsep ini pada pertama kali belajar OOP.
Untuk memahaminya, kita harus ingat bahwa class hanyalah sebuah "blue print" atau kerangka. Seluruh property dan method nantinya akan diakses dari dalam objek, bukan dari dalam class. Pada saat proses instansiasi class, seluruh property dan method akan "dicopy" ke dalam objek.
Perintah: $laptop_baru = new laptop() akan membuat objek $laptop_baru memiliki property $pemilik dan method hidupkan_laptop() (sesuai dengan kerangka dari class laptop). Seluruh perintah lanjutan yang kita lakukan berada di dalam objek $laptop_baru, bukan di dalam class laptop.
Ketika kita menjalankan method hidupkan_laptop(), objek $laptop_baru akan menemui baris perintah:
"Hidupkan Laptop $pemilik"
variabel $pemilik di sini tidak terdefinisi karena $pemilik berada di dalam konteks class, bukan objek.
Untuk mengatasi masalah ini, kita harus mengubah definisi method hidupkan_laptop() menjadi:
"Hidupkan Laptop $this->pemilik";
Variabel $this merujuk kepada objek yang sedang menginstansiasi class.
Jika di dalam class laptop kita membuat:
"Hidupkan Laptop $this->pemilik";
Maka di dalam objek $laptop_baru, akan menjadi:
"Hidupkan Laptop $laptop_baru->pemilik";
Jika kita memiliki objek lain misalkan $laptop_lama, maka perintah tersebut akan dijalankan menjadi:
"Hidupkan Laptop $laptop_lama->pemilik";
Perhatikan bahwa pada level objek, variabel $this 'dijalankan' menjadi objek saat ini.
Untuk menguji pemahaman kita, silahkan pelajari kode berikut ini:
<?php // buat class laptop class laptop { Â // buat property untuk class laptop public $pemilik="Andi"; Â // buat method untuk class laptop public function hidupkan_laptop() { return "Hidupkan Laptop $this->pemilik"; } } Â // buat objek dari class laptop (instansiasi) $laptop_baru = new laptop(); Â echo $laptop_baru->hidupkan_laptop(); // "Hidupkan Laptop Andi"; Â //ubah isi property $pemilik pada objek $laptop_baru $laptop_baru->pemilik="Arie"; Â echo $laptop_baru->hidupkan_laptop(); // "Hidupkan Laptop Arie"; // buat objek baru dari class laptop dan panggil hidupkan_laptop() $laptop_lama = new laptop(); echo $laptop_lama->hidupkan_laptop(); ?>
Tanpa menjalani kode program tersebut, silahkan tebak apa hasil yang akan ditampilkan dari perintah: echo $laptop_lama->hidupkan_laptop() yang berada pada baris terakhir, dan kenapa hasilnya bukan "Hidupkan Laptop Arie" ?
Jika anda bisa menebak hasil akhir dengan benar dan bisa menjelaskan kenapa hasilnya bukan "Hidupkan Laptop Arie", maka anda telah memahami salah satu konsep terpenting dalam Pemrograman berbasis objek.
Jika di dalam tutorial kali ini kita membahas pengertian dan fungsi variabel $this, dalam tutorial berikutnya kita akan membahas variabel $this secara lebih jauh, dan melihat cara penggunaan pseudo-variable $this dalam pemrograman objek PHP.
Trims Gan tutornya ..
Sangat sangat sangat membantu ..
Sama-sama gan, semoga bermanfaat :)
gan, pada saat kita mendeklarasikan variabel di luar fungsi, bukankah harus ditambahkan global didalam fungsi tersebut?
Bukan "harus" gan, tetapi cuma pilihan saja, tergantung kebutuhan.
Keyword global memiliki fungsi khusus dimana gunanya adalah sebagai cara mengakses variabel "luar" dari dalam sebuah fungsi. Untuk jelasnya, saya sudah buatkan tutorial khusus mengenai ini di: Tutorial PHP: Pengertian Variabel Scope, Global Variabel, dan Static Variabel PHP.
Oh ya, di halaman ini kita membahas class, jadi konsepnya memang berbeda dengan fungsi. :)
oh gitu ya, oke makasih gan :)
gan ada tutorial buat session cookie php?
Saat ini belum ada gan, tp memang sudah saya rencanakan,…
Semoga berkenan menunggu.. :)
Akhirnya saya mulai paham , padahal selama ini saya sudah sering ketemu di framework CI , tapi tidak paham betul tentang $this,,,,Terima kasih min
Sama2 gan, terimakasih juga atas kunjungannya :)
siip gan, o ya say kemaren2 request triger mysql gan,,,,, tolong dong gan, mungkin cara penjelasan duniailkom mudah dipahami =D
Hehe.. ditunggu saja y gan, kebetulan sedang lagi ada kerjaan belakangan ini, jadi belum sempat update tutorial MySQLnya :)
Saya senang banget bisa belajar di disini gan, sangat2 jelas dan membantu. Terimakasih banyak gan, ditunggu tutorial2 lainnya yg lebih keren :)
Terimakasih juga untuk kunjungannya gan.. Saya juga senang tutorialnya bisa bermanfaat :)
Terimakasih, pelajaran yang mudah dipahami. sangat membantu pemahaman tentang OOP.
Tapi yang masih bingung adalah kapan diterapkan class itu dalam contoh pemrograman. Terutama yg berhubungan dengan database.
Misal, kita punya database sekolah, didalamnya ada tabel siswa, apakah di pemrogramannya juga mesti dibikin class yang menyatakan/sama dengan isi dari tabel siswa tersebut?
Makasih ya,,,,
Makasih gan, simpel tapi jelas dan mudah dipahami, mengena banget, selama ini cuma pake tapi g begitu paham penjelasannya, yang penting coding jalan sesuai keinginan. Oiya, kalo bisa kedepannya ada tutorial framework PHP, CI/Laravel/Yii, saya tunggu artikel" selanjutnya.
Terimakasih gan, senang tutorialnya bisa bermanfaat. Untuk tutorial terkait framework ditunggu saja y gan.. :)
mau nanya, dari contoh script yang terakhir, saya kepikiran bahwa apakah kalau property sudah didefinisikan didalam class (dalam kasus ini property pemilik yaitu andi) masih bisa ditampilkan dengan nama yang berbeda (menjadi arie) dengan cara mengakses property objek dari objek itu sendiri?
terimakasih gan tutorialnya sangat sangat membantu :), ane lagi belajar oop buat bekel belajar CI, karena website ini jadi mulai mengerti sedikit2.. karena awalnya setiap bikin website php ane belum oop. hehe
Sama2 gan.. semoga tutorialnya bermanfaat :)
OOT dikit, ini ga ada tombol "donate" kek atau "contribute to this site" dimana gitu om? Tulisan lo selaras banget buat dibaca sama otak yg rada lemot. Apalagi analogi yang dipake 10x lipat dari PHP docs lebih simpel alurnya plus ga perlu translate ke indo dulu di otak yg mana harus kerja dua kali ni otak hahahaha
Hehehe, terimakasih gan, saya juga senang tutorial yang ada bisa dipahami dengan mudah. Contohnya memang saya buat sederhana agar bisa dapat konsep OOPnya :)
Untuk donasi dan mendukung duniailkom, bisa dengan membeli eBook Duniailkom gan, jadi bisa sekalian belajar juga (syukur2 kalo dapat tambahan materi baru, hehe). eBook PHP saat ini juga sedang saya tulis, mungkin bisa selesai dalam beberapa minggu kedepan.
Pengen nangis belajar OOP :""
Hehe, sabar gan… mahasiswa ilmu komputer/ IT saja biasanya perlu mata kuliah khusus tentang OOP 1 semester (6 bulan), jadi memang g bisa instan untuk paham OOP :)
Luar Biasa tutornya om,,
ijin nyomot ilmunya om,, siapa tau bisa dishare ke yang lain ilmunya biar tambah berkah
Siip, silahkan gan.. :)
om untuk operasi aritmatika gimana yah? saya coba bikin class persegi panjang untuk menghitung luas tapi kok outputnya bukan hasil perkalian panjang dan lebarnya yah, mohon pencerahanya om andre
<?php
class persegipanjang {
public $panjang;
public $lebar;
function luas(){
return "luas persegi panjang ini adalah $this->panjang * $this->lebar";
}
}
$luas_persegipanjang=new persegipanjang;
$luas_persegipanjang->panjang=5;
$luas_persegipanjang->lebar=4;
echo $luas_persegipanjang -> luas();
?>
Pemanggilan property objek g bisa dari dalam string gan, jadi kita harus mengeluarkannya dari dalam string, seperti berikut ini:
function luas() {
return "luas persegi panjang ini adalah: ". $this->panjang * $this->lebar;
}
ohh gitu ya.. oke deh thx gan
wah pinter nih mas andre, berkat mas andre saya jadi ngomong sndiri, itu yang ada tebak2 an :D
mudah saya pahami. terjawab untuk case ini,
wah saya jadi semangat deh
Hehe, siip… lanjut belajarnya mas.. :)
makasih gan
mantap tutornya :D saya coba jawab dlu mohon dikoreksi :D atau diperbaiki
tidak laptop arie karena disitu menggunakan this pemilik msh wilayah class bukan objek property
kan diclass awalnya sudah di masukin $pemilik"Andi";
sedangkan laptop arie akan keprint apabila script pada return seperti ini:
return "Hidupkan Laptop". $this->pemilik;
script diatas artinya memanggil property objek diluar dr string.
script diatas yang keprint hanya kalimat kedua laptop arienya :) karena dikalimat pertama hanya $laptop_baru=new laptop ();
ga ada menyebutkan pemiliknya
—————————-
$laptop_baru = new laptop(); // membuat laptop_baru (kalimat kedua ga perlu buat new laptop lagi)
$laptop_baru-> pemilik="Maha"; // laptop baru dengan pemilik maha
echo $laptop_baru->hidupkan_laptop(); // hidupkan Laptop maha (kalimat pertama)
$laptop_baru-> pemilik="Arie"; // laptop baru dengan pemilik arie
echo $laptop_baru->hidupkan_laptop(); // hidupkan laptop arie (kalimat kedua)
$laptop_lama = new laptop(); // membuat laptop_lama
$laptop_lama-> pemilik="Abdillah"; // laptop_lama pemiliknya abdillah
echo $laptop_lama->hidupkan_laptop(); //hidupkan laptop abdillah (kalimat ketiga)
?>
—————————-
klo script diatas contoh 3 kalimat yg diprint dengan pemilik beda beda
berarti intinya ialah ketika sebuah value dari property yg di set dari suatu objek, secara otomatis akan menimpa value property dr dlm class yg telah di instansiasi kan ke dalam objek donk ya gan?
kalo sy bikin contoh lain misal:
class pesawat{
// property
public $nama_pesawat = "Garuda Indonesia";
// method
public function terbang(){
return "Pesawat $this->nama_pesawat sebentar lagi akan terbang";
}
}
// instansiasi
$maskapai = new pesawat();
// masukan nilai dari ke property $nama_pesawat dari objek
$maskapai->nama_pesawat = "Qatar Airways";
// tampilkan method terbang()
echo $maskapai->terbang(); // "Pesawat Qatar Airways sebentar lagi akan terbang"
value yg di set dari objek ke dalam property dlm class akan menimpa value yg telah di set dr dalam class tersebut.
bener ya gan begitu inti dari paragraf terakhir artikel halaman ini?
dengan kata lain, nilai property yg di set di dalam class itu adl nilai 'default' yg kita buat ketika suatu method di dalam class tersebut mengakses property itu di dlm class yg sama dan di panggil dari luar melalui objek.
Yup, konsepnya seperti itu. Variabel $this digunakan untuk mengakses property milik object itu sendiri. Yang proses penulisannya dibuat di dalam class.
Jika nilai tersebut ditimpa dari instance object, otomatis akan berubah juga (sama seperti property biasa).
Tutorial yang sangat jelas. Terima kasih
waaa mksh bgt bang….salah satu pahala g putus ilmu yg bermanfaat bang,mksh sekali lg bang
Aamiin… :)
Alhamdulillah paham
saya gk paham min, mohon penjelasannya?
padahal kan kita dsitu gak ada make variable $this
Penggunaan variabel $this ada di contoh terakhir. Itu dipakai untuk mengatasi masalah saat ingin mengakses property milik object.
Yg baris terahir itu tetep Andi, karena variable Arie cuma di ganti di objek laptop baru aja.
sungguh jelas penjelasannya membuat saya mengerti. terimakasih sebanyak2nya mas andre..
sungguh jelas penjelasannya membuat saya mengerti. terimakasih sebanyak2nya mas andre..
Halo min mau update yang ini kode yang dibawah itu bisa aja kok langsung kita echo hidupkan_laptop(). Mungkin ini karena versi PHP yang terbaru sudah mendukung
class laptop {
// buat property untuk class laptop
public $pemilik="Andi";
public $merk;
// buat method untuk class laptop
public function hidupkan_laptop() {
return "Hidupkan Laptop $pemilik";
}
}
// buat objek dari class laptop (instansiasi)
$laptop_baru = new laptop();
echo $laptop_baru->hidupkan_laptop(); // "Hidupkan Laptop"