Pemrograman Object Oriented PHP Bagian I

Khairu Aqsara Sudirman

Khairu Aqsara Sudirman

Nov 08, 2019 — 8 mins read
Photo by <a href="https://unsplash.com/@kobuagency" target="_blank">Kobu Agency</a> on <a href="https://unsplash.com" target="_blank">Unsplash</a>

Photo by Kobu Agency on Unsplash

Tulisan kali ini mungkin akan sedikit lebih panjang dan membingungkan, tulisan ini merupakan keresahan saya pribadi dan berdasarkan pengalaman, karena saya melihat sekarang ini banyak programmer PHP langsung mempelajari Framework tanpa memahami konsep Object Oriented pada PHP, akhirnya masalah-masalah yang seharusnya bisa diselesai dengan cara yang lebih sederhana malah menjadi ruwet.

Apa itu OOP (Object Oriented Programming)

jika kita menelik kedalam halaman Wikipedia, disana akan dijelaskan jika

OOP merupakan paradigma pemrograman yang berorientasikan kepada objek. Semua data dan fungsi di dalam paradigma ini dibungkus dalam kelas-kelas atau objek-objek.

Contoh bahasa pemrograman yang menggunakan OOP selain PHP adalah Java, Python, Perl, C++, .Net, Ruby dan masih banyak lagi. perbedaanya antara pemrograman terstruktur dan berorientasi objek juga sangat beragam, tetapi menurut saya dengan melihat struktur pengkodean-nya saja kita sudah bisa mengenalinya, untuk jelasnya teman-teman yang berkuliah di sistem Informasi atau Teknologi Informasi pasti sudah mendpatkan Teori tentang hal ini, atau bisa Googling sendiri, sudah banyak yang menjelaskan tentang perbedaanya.

ada beberapa hal yang harus difahami terlebih dahulu jika kita ingin melangkah lebih jauh kadalam OOP, diantaranya:

1. Variable
2. Kondisional
3. Perulangan
4. Array
5. Fungsi

jika sudah memahami dasar-dasar diatas pada PHP maka akan lebih mudah untuk mempelajari OOP itu sendiri, jika teman-teman belum memahami betul tentang dasar-dasar diatas, saran saya sebaiknya pelajari dulu, karena akan sangat kesulitan untuk mempelajari OOP jika tidak memahami dasar-dasar tersebut.

Class Dan Property

1. Class

Sederhananya class merupakan cetak biru atau blueprint dari objek, class merupakan kerangka dasar yang memiliki property dan method, dan yang akan kita gunakan adalah hasil dari cetak biru tersebut yaitu objek.

Aturan penamaan class diawali dengan huruf kapital pada karaketer pertama dari nama class, atau bisa juga menggunakan underscore, mari kita lihat contohnya pada barisan kode dibawah

<?php 
class Pengguna{ }
class Rekening_pengguna{ }

2.Property

Property sama dengan variable yang ada didalam sebuah class. Atau ada yang biasa menyebutnya dengan Attribute, penulisanya biasanya diawali dengan var (visiblity keyword) yaitu public,private atau protected dan diikuti dengan nama dari variable tersebut.

<?php 
class Pengguna{
	var $nama;
	public $username;
	private $no_rekening;
	protected $saldo;
}

3.Method

Merupakan event atau tindakan atau aksi dari sebuah class, jika sebelumnya kita membuat sebuah class pengguna maka contoh method-nya bisa jadi ada daftar pengguna, edit pengguna, delete pengguna, cek saldo pengguna dan yang lain nya. mudahnya method adalah sebuah fungsi yang ada dalam class, ketika kita bicara OOP fungsi dalam class kita sebut sebagai method, sedangkan jika kita berbicara struktural programming maka function adalah fungsi, jadi alias sama saja, hanya penempatanya yang berbeda, didalam dan diluar class.

<?php 
class Pengguna{
	public function daftar(){ }
	public function tampilkan_saldo($id_pengguna){ }
}

Object

ketika kita berbicara masalah object, maka kita berbicara hasil konkrit dari sebuah class, jika sebelumnya kita membuat sebuah class Pengguna, maka objeknya adalah pengguna yang menggunakan Class tersebut, misalnya seperti Ali, Yusup, Fahrul dan lainya, perhatikan contoh dibawah.

<?php 
class Pengguna {
	var $nama;
	var $tgl_lahir;
	var $alamat;
	public function welcome(){
		echo "Halo saya adalah ".$this->nama;
	}
}

contoh diatas adalah sebuah class kongkrit yang belum memiliki objek, objek kita ciptakan dengan menginisialisasikanya kedalam class tersebut, misalnya seperti

<?php 
class Pengguna {
	var $nama;
	var $tgl_lahir;
	var $alamat;


	public function welcome(){
		echo "Halo saya adalah ".$this->nama."<br/>";
		echo "Saya lahir tanggal ".$this->tgl_lahir."<br/>";
		echo "Alamat saya di ".$this->alamat."<br/>";
	}
}

$ali = new Pengguna();
$ali->nama = "Ali Sumitro";
$ali->tgl_lahir = "14 Oktober 1981";
$ali->alamat = "Yogyakarta";
$ali->welcome();
// hasilnya adalah
// Halo saya adalah Ali Sumitro
// Saya lahir tanggal 14 Oktober 1981
// Alamat saya di Yogyakarta

$yusup = new Pengguna();
$yusup->nama = "Yusup Setyawan";
$yusup->tgl_lahir = "11 February 1991";
$yusup->alamat = "Bantul";
$yusup->welcome();
// hasilnya adalah
// Halo saya adalah Yusup Setyawan
// Saya lahir tanggal 11 February 1991
// Alamat saya di Bantul

jika kita perhatikan barisan kode diatas, kita bisa melihat bahwa yang menjadi objek adalah ali dan yusup, karena kedua variable tersebut menginisialisasikan class Pengguna, objek dari satu class tidak terbatas. untuk lebih jelas mari kita bahas barisan kodenya, agar lebih mudah untuk difahami dan dimengerti.

<?php 
class Pengguna{
	....
}

baris ini dimana kita mendifinisikan sebuah class baru dengan nama Pengguna, di-ikuti dengan tanda kurung kurawal {}

<?php 
....
	var $nama;
	var $tgl_lahir;
	var $alamat;
....

baris ini kita mendifinsikan property didalam class Pengguna, diawali dengan keyword var, kita bisa saja menggunakan keyword public, private atau protected tapi pada bagian ini kita cukup menggunakan var, kita akan membahas apa itu private, public dan protected pada bagian selanjutnya, untuk sementara abaikan saja dulu.

<?php 
....
	public function welcome(){
		echo "Halo saya adalah ".$this->nama."<br/>";
		echo "Saya lahir tanggal ".$this->tgl_lahir."<br/>";
		echo "Alamat saya di ".$this->alamat."<br/>";
	}
....

baris ini merupakan method dari sebuah class, method disusun dan dibangun sesuai dengan kebutuhan program.

<?php 
...
$ali = new Pengguna();
...

pada bagian inilah yang kita sebut dengan menginisialisasikan atau menginstanisasikan atau membuat instance sebuah class kedalam objek, dimana variable $ali menjadi objek dari class Pengguna

<?php 
...
$ali = new Pengguna();
$ali->nama = "Ali Sumitro";
$ali->tgl_lahir = "14 Oktober 1981";
$ali->alamat = "Yogyakarta";
$ali->welcome();
...

terlihat jika kita memberikan nilai kepada masing-masing property yang berada dalam objek $ali, jika diperhatikan terdapat satu baris $ali->welcome(); perlu difahami, bagian ini kita tidak memberikan nilai, melainkan memanggil method welcome() yang ada dalam class Pengguna yang sudah menjadi bagian dari objek $ali.

Objek sebagai Entitas Terpisah.

jika kita perhatikan barisan kode sebelumnya, terdapat 2 objek dengan nama $ali dan $yusup, dimana kedua objek ini berasal dari satu class yang sama yaitu class Pengguna. Semua method dan property dalam objek $ali akan sama persis dengan objek $yusup. Tetapi objek $ali dan $yusup merupakan entitas yang berbeda atau terpisah, sehingga kita bisa memberikan nilai yang berbeda pada masing-masing objek tersebut, seperti yang terlihat pada barisan kode sebelumnya.

Konstanta Class

Konstanta class atau Class Constant merupakan konstanta yang didifinsikan didalam sebuah class, konstanta berisi nilai tetap atau mutlak yang nilainya tidak bisa dirubah, mendifinisikan konstanta class cukup mudah, dengan menggunakan keyword const dalam sebuah class, misalnya

<?php
class Pengguna{
	const KOTA = 'Yogyakarta';
}

biasanya agar lebih mudah dalam membedakan konstanta dengan variable, konstanta dibuat dengan menggnakan huruf kapital. Konstanta dapat diakses atau digunakan dengan beberapa cara, dari dalam class itu sendiri, dari luar class tersebut, dari objek, atau dari variable yang ber-value nama sebuah class.

akses konstanta dari dalam Class itu sendiri.

dengan menggunakan keyword self di-ikuti dengan titik dua ganda (double colon) dan nama konstanta, contohnya

<?php 
class Pengguna{
	const KOTA = 'Yogyakarta';
	public function show_kota(){
		echo self::KOTA;
	}
}

Akses dari luar class

menggunakan nama class, double colon dan di-ikuti dengan nama konstanta yang akan dipanggil, misalnya

<?php
class Pengguna{
	const KOTA = "Yogyakarta";
}
echo Pengguna::KOTA;

Akses dari sebuah Objek

cara nya hampir sama, yaitu dengan menggunakan nama objek dan double colon di-ikuti dengan nama konstanta yang akan dipanggil, misalnya

<?php
class Pengguna{
	const KOTA = "Yogyakarta";
}
$ali = new Pengguna();
echo $ali::KOTA;

Akses dari variable yang ber-value nama dari sebuah class.

mungkin ini agak sedikit aneh, tetapi memang begitu, kita bisa mengoverride nama sebuah class kedalam sebuah variable value, tetapi perlu di-ingat bahwa variable value tidak boleh berupa keyword seperti self, parent dan static.

<?php 
class Pengguna{
	const KOTA = "Yogyakarta";
}
$nama_class = "Pengguna";
echo $nama_class::KOTA;

Visibility

Property, Method dan Konstanta (Mulai PHP 7.1) dapat dikontrol aksesnya menggunakan visibility keyword. Terdapat tiga keyword dalam OOP PHP, yaitu public, protected dan private, sejak tadi mungkin teman-teman bertanya apa itu,kita akan mencoba membahasnya pada bagian ini, ada beberapa literatur umum yang juga menyebut istilah ini dengan enkapsulasi atau encapsulation

public

artinya property, method atau konstanta yang dapat diakses dari dalam dan luar class.

protected

Artinya property, method atau konstanta yang hanya dapat diakses dari dalam class itu sendiri dan extended/inherent class nya, khusus extends dan inherent akan kita bahas nanti.

Private

Artinya property, method atau konstant hanya dapat diakses dalam class itu sendiri

Property Visibility

Property sebaiknya didefinisikan sebagai public, protected atau private, karena jika kita mendefinisikan nya menggunakan var secara otomatis property tersebut akan dianggap sebagai public.

<?php 
class Pengguna{
	var $nama = 'Kurosaki Ichigo';
	protected $nomor_rekening = "10101010101";
	private $saldo = "5000";


	function show_pengguna(){
		echo $this->nama;
		echo $this->nomor_rekenig;
		echo $this->saldo;
	}
}
// buat objek baru untuk class pengguna
$user_baru = new Pengguna();
// tampilkan nama
echo $user_baru->nama;

jika kode diatas kita jalankan, maka akan keluar Kurosaki Ichigo, jika kita mencoba memanggil $user_baru->nomor_rekening; maka akan keluar Fatal Error karena property $nomor_rekening merupakan protected property.Sama halnya yang akan terjadi jika kita memanggil $user_baru->saldo; Layar kita akan dihiasi oleh pesan Fatal Error, karena $saldo merupakan private property.

tetapi Fatal Error tidak akan terjadi jika kita memanggil $user_baru->show_pengguna(); karena show_pengguna() merupakan public method walaupun berisi protected dan private property.

Method Visibility

Sama halnya dengan property, method bisa didefinsikan sebagai public, protected atau private, dan jika kita mendeklarasikan tanpa visibility maka secara otomatis akan dianggap sebagai public method.

<?php 
class Pengguna{
	public function publicMethod(){
		echo "ini public method";
	}

	protected function protectedMethod(){
		echo "ini protected method";
	}

	private function privateMethod(){
		echo "ini private method";
	}

	function tampilkanSemua(){
		echo $this->publicMethod();
		echo $this->protectedMethod();
		echo $this->privateMethod();
	}
}

// buat objek baru
$pengguna = new Pengguna();
$pengguna->publicMethod(); // ini public method
$pengguna->protectedMethod(); // Fatal Error
$pengguna->privateMethod(); // Fatal Error

// ini tidak akan Error
$pengguna->tampilkanSemua();// semua echo diatas akan muncul

Constant Visibility

mulai PHP 7.1 konstanta atau lebih tepatnya konstanta class dapat didefinisikan sebagai public, protected atau private, sama halnya dengan property dan method, jika dideklarasikan tanpa menggunakan salah satu dari tiga visibility keyword maka secara otomatis akan dianggap sebagai public.

<?php 
class Pengguna{
	public const PUBLIC = "public const";
	protected const PROTECTED = "protected const";
	private const PRIVATE = "private const";

	function tampilkanSemua(){
		echo self::PUBLIC;
		echo self::PROTECTED;
		echo self::PRIVATE;
	}
}

// buat objek baru
$pengguna = new Pengguna();
echo $pengguna::PUBLIC; // public const
echo $pengguna::PROTECTED; // Fatal Error
echo $pengguna::PRIVATE; //Fatal Error
// ini tidak akan error
$prngguna->tampilkanSemua(); // echo semua value dari const

Class Autoloader

salah satu hal dari banyak hal yang tidak efisien ketika kita akan menggunakan banyak class kita para programmer akan mengincludekan nya satu-persatu file class pada permulaan baris kode, ini bukanlah sebuah masalah sebenarnya jika file class yang di-includekan hanya satu atau dua, bagaimana jika sampai 10 atau bahkan 20 file class ? tentu saja sangat tidak efisien walaupun bisa dilakukan.

mulai dari PHP 5 masalah itu sebenarnya sudah bisa diatasi dengan cukup mudah, misal kita membuat sebuah class Mobil dan disimpan dengan nama Mobil.php

<?php 
class Mobil{
	function iniMobile(){
		echo "ini mobil saya";
	}
}

kemudian buat lagi class dengan nama Warna dan simpan dengan nama Warna.php

<?php 
class Warna{
	function warnanya(){
		echo "Warnanya Biru";
	}
}

secara umum kita akan mengincludekan kedua file tersebut dalam satu file, misalnya

<?php 
include 'Mobil.php';
include 'Warna.php';

$mobil = new Mobil();
echo $mobil->iniMobil();

$warna = new Warna();
echo $warna->warnanya();

tentu saja tidak ada masalah dengan kode tersebut, jika dijalankan semua bagian akan bekerja dengan semestinya, bagaiamna jika classnya puluhan atau bahkan ratusan ? tentu saja merepotkan bukan jika harus mengincludekan satu persatu class-class tersebut.

untuk masalah itulah class Autoloader hadir, dengan adanya class Autoloader kita tidak perlu menginclude-kan semua class-class tersebut, cukup dengan beberpa baris kode tambahan semua class-class tersebut akan terpanggil secara otomatis.

<?php 
spl_autoload_register(function($class){
	include $class. '.php';
});

$mobil = new Mobil();
echo $mobil->iniMobil();

$warna = new Warna();
echo $warna->warnanya();

jika kita jalankan kode tersebut, hasilnya akan sama dengan hasil kode sebelumnya, bedanya hanya saja kita tidak mengincludekan class-class seperti sebelumnya, class-class tersebut akan secara otomatis ter-include ketika new Class() dideklarasikan.

spl_autload_register() berfungsi untuk meng-registerkan function atau static method yang berisi class, selanjutnya apabila ada class yang di-inisialisasikan menggunakan new class() PHP akan melakukan antrian (queue/stack) dan memanggilnya secara berurutan. konsep inilah yang melahirkan banyak framework-framework PHP yang berbasis pada composer dan namespace yang nantinya akan kita bahas satu-persatu.

linux laravel php
Read this next

Pemrograman Object Oriented PHP Bagian II

Melanjutkan dari pembahasan sebelumnya, kali ini kita akan mencoba lebih mendalami OOP pada PHP, beberapa bahasan pada tulisan kali ini kita...

You might enjoy

Mendeteksi Virus Corona Melalui Hasil Scan X-Ray Menggunakan Tensorflow dan Keras

Seperti kebanyakan orang, saya sendiri merasa deg-deg-an dengan wabah virus corona ini, pilek dikit takut corona, padahal biasanya juga seri...