Anda di halaman 1dari 17

Nama :

Nim :
Program studi :

1. Apa itu PHP OOP


OOP adalah singkatan dari Object-Oriented Programming.

Pemrograman prosedural adalah tentang prosedur penulisan atau fungsi yang melakukan
operasi pada data, sedangkan pemrograman berorientasi objek adalah tentang Membuat
objek yang berisi data dan fungsi.

Pemrograman berorientasi objek memiliki beberapa keunggulan dibandingkan prosedural


Pemrograman:

• OOP lebih cepat dan lebih mudah dijalankan


• OOP menyediakan struktur yang jelas untuk program
• OOP membantu menjaga kode PHP DRY "Don't Repeat Yourself", dan membuat si
Kode lebih mudah dipelihara, dimodifikasi, dan di-debug
• OOP memungkinkan untuk membuat sepenuhnya dapat digunakan kembali Aplikasi
dengan kode lebih sedikit dan waktu pengembangan lebih singkat
Ujung: Prinsip "Don't Repeat Yourself" (DRY) adalah tentang mengurangi pengulangan
kode. Anda harus mengekstrak kode yang umum untuk aplikasi, dan menempatkannya di
satu tempat dan menggunakannya kembali alih-alih mengulanginya.
2. OOP PHP CLASSES & OBJECTS
a. Menentukan Kelas
Kelas didefinisikan dengan menggunakan kata kunci, diikuti dengan nama kelas dan
sepasang kurung kurawal ({}). Semua Properti dan metodenya masuk ke kurung
kurawal :class
Syntax :
<?php
class class_name {
//code disini
}
?>
Di bawah ini kami mendeklarasikan kelas bernama mobil yang terdiri dari dua properti
($nama dan $jenis) dan dua metode set_nama() dan get_nama() untuk mengatur dan
mendapatkan properti $nama:
Contoh :
<?php
class mobil {
// Properties
public $nama;
public $jenis;

// Methods
function set_name($nama) {
$this->name = $nama;
}
function get_name() {
return $this->nama;
}
}
?>
b. Menentukan Object
Kelas bukanlah apa-apa tanpa objek! Kita dapat membuat beberapa objek dari a .class.
Setiap objek memiliki semua properti dan metode yang ditentukan dalam kelas, tetapi
mereka akan memiliki nilai properti yang berbeda.
Objek kelas dibuat menggunakan kata kunci.new
Dalam contoh di bawah ini, $bmw dan $volvo adalah contoh dari kelas mobil:
Syntax :
<!DOCTYPE html>
<html>
<body>

<?php
class mobil {
// Properties
public $nama;
public $jenis;
// Methods
function set_name($nama) {
$this->name = $nama;
}
function get_name() {
return $this->name;
}
}
$bmw = new mobil();
$volov = new mobil();
$bmw->set_name('BMW');
$volov->set_name('VOLOV');

echo $bmw->get_name();
echo "<br>";
echo $volov->get_name();
?>
</body>
</html>
Output :

Pada contoh code ini kita mengawali dengan mendeklarasikan class dari objects. Class
dideklarasikan dengan nama mobil. Class ini memiliki 2 properti yaitu variable $nama
dan $jenis. Dilanjutkan dengan methods yang dimana function dari methods ini akan
mengatur nama dengan mengambil data dari variable $nama. Kemudian dilanjutkan
dengan mendeklarasikan objets dengan variable $bmw dan $volov yang dimana pada
variable diatur dengan data yaitu ‘BMW’ dan ‘VOLOV’.
c. PHP kata kunci $this
Kata kunci $this mengacu pada objek saat ini, dan hanya tersedia di dalam Metode.
Contoh :
<?php
class mobil {
public $nama;
}
$bmw = new mobil();
?>
Kita dapat mengubah nilai property $nama dengan menggunakan dua metode yaitu
Cara 1 :
Didalam Kelas
Syntax :
<!DOCTYPE html>
<html>
<body>

<?php
class mobil {
public $nama;
function set_name($nama) {
$this->name = $nama;
}
}
$bmw = new mobil();
$bmw->set_name("BMW");

echo $bmw->name;
?>

</body>
</html>
Output :
Cara 2 :
Diluar Kelas (dengan langsung mengubah nilai properti)
Syntax :
<!DOCTYPE html>
<html>
<body>

<?php
class mobil {
public $nama;
}
$volvo = new mobil();
$volvo->name = "VOLVO";

echo $volvo->name;
?>

</body>
</html>
Output :

3. PHP OOP – Constructor


Konstruktor memungkinkan Anda untuk menginisialisasi properti objek setelah
pembuatan objek.
Jika membuat sebuah function, PHP akan secara otomatis memanggil ini berfungsi saat
Anda membuat objek dari kelas. __construct()
Perhatikan bahwa fungsi konstruk dimulai dengan dua garis bawah (__)!
Kita lihat pada contoh di bawah ini, bahwa menggunakan konstruktor menyelamatkan kita
dari memanggil metode set_name() yang mengurangi jumlah kode:
<!DOCTYPE html>
<html>
<body>
<?php
class mobil {
public $nama;
public $jenis;
function __construct($nama) {
$this->name = $nama;
}
function get_name() {
return $this->name;
}
}
$ferrari = new mobil("FERRARI");
echo $ferrari->get_name();
?>
</body>
</html>
Output :

4. PHP OOP – Destructor


Destructor dipanggil ketika objek dirusak atau skrip dihentikan atau keluar.
Jika Anda membuat afunction, PHP akan secara otomatis memanggil ini berfungsi di akhir
skrip.__destruct()
Perhatikan bahwa fungsi destruct dimulai dengan dua garis bawah (__)!
Contoh di bawah ini memiliki fungsi __construct() yang secara otomatis dipanggil saat
Anda membuat objek dari kelas, dan fungsi __destruct() yaitu secara otomatis dipanggil
di akhir skrip:
Syntax :
<!DOCTYPE html>
<html>
<body>

<?php
class mahasiswa {
public $nama;
public $jurusan;

function __construct($nama) {
$this->name = $nama;
}
function __destruct() {
echo "Perkenalkan nama saya adalah {$this->name}.<br>";
}
}

$ilham = new mahasiswa("Ilham Setiawan");


?>

</body>
</html>
Output :

5. PHP OOP - Access Modifiers


Properti dan metode dapat memiliki pengubah akses yang mengontrol di mana mereka
dapat diakses.
Ada tiga pengubah akses:
• public- properti atau metode dapat diakses dari mana saja. Ini adalah default
• protected- properti atau metode dapat diakses dalam kelas dan berdasarkan kelas
yang berasal dari kelas tersebut
• private- properti atau metode dapat HANYA dapat diakses di dalam kelas
Dalam contoh berikut, kami telah menambahkan tiga pengubah akses berbeda ke tiga
properti (nama, jurusan, nim). Di sini, jika Anda mencoba mengatur properti name itu akan
berfungsi dengan baik (karena properti name bersifat publik, dan dapat diakses dari
dimana-mana). Namun, jika Anda mencoba untuk mengatur properti jurusan atau nim itu
akan mengakibatkan fatal kesalahan (karena properti warna dan berat dilindungi dan
pribadi):
<?php
class mahasiswa {
public $nama;
protected $jurusan;
private $nim;
}

$i
lham = new mahasiswa();
$ilham->name = 'Ilham Setiawan'; // OK
$ilham->jurusan = 'Sastra Mesin'; // ERROR
$ilham->nim= 'Z1Q120069’; // ERROR
?>
6. PHP OOP – Inheritance
Pewarisan dalam OOP = Ketika kelas berasal dari kelas lain.Kelas turunan akan mewarisi
semua properti publik dan dilindungi dan metode dari kelas induk. Selain itu, dapat
memiliki properti sendiri dan Metode. Kelas yang diwariskan didefinisikan dengan
menggunakan kata kunci.extends
Mari kita lihat sebuah contoh:
<!DOCTYPE html>
<html>
<body>
<?php
class mahasiswa {
public $nama;
public $jurusan;
public function __construct($nama, $jurusan) {
$this->name = $nama;
$this->jurusan = $jurusan;
}
public function intro() {
echo "hallo perkenalkan {$this->name}, saya berasal dari
{$this->jurusan}.";
}
}
class ilham extends mahasiswa {
public function message() {
echo "Siapakah saya? ";
}
}
$ilham = new ilham("Ilham Setiawan", "Sastra Mesin");
$ilham->message();
$ilham->intro();
?>
</body>
</html>
Output :

Pada code kali ini kita diawali dengan membuat class utama yaitu class mahasiswa. Pada
class ini memiliki dua function yaitu variable $nama dan $jurusan, kemudian membuat
__construct yang berisi perintah $this untuk mendefinisikan fungsi dari variable yang
dibuat sebelumnya. Kelas ilham diwarisi dari kelas mahasiswa. Yang berarti bahwa class
ilham dapat menggunakan variable $anma dan $jurusan serta metode __construrct() dan
intro() yang dimana ini merupakan public function dari kelas mahasiswa. Serta pada kelas
ilham juga memiliki metode sendiri yaitu massage().
a. PHP - Inheritance and the Protected Access Modifier
Sebelumnya kita belajar bahwaproperti atau metode dapat diakses dalam kelas dan
oleh kelas yang berasal dari kelas itu. Apa maksudnya?protected
Mari kita lihat sebuah contoh:
<!DOCTYPE html>
<html>

<body>
<?php
class mahasiswa {
public $nama;
public $jurusan;
public function __construct($nama, $jurusan) {
$this->name = $nama;
$this->jurusan = $jurusan;
}
protected function intro() {
echo "Hallo, Perkenalkan saya {$this->name} berasal dari
jurusan {$this->jurusan}.";
}
}

class ilham extends mahasiswa {


public function message() {
echo "Ingin mengenal saya? ";
}
}

// Try to call all three methods from outside class


$ilham= new ilham("Ilham Setiawan", "Satra Mesin"); // OK.
__construct() is public
$ilham->message(); // OK. message() is public
$ilham->intro(); // ERROR. intro() is protected
?>

</body>
</html>
Output :

Sama seperti code sebelumnya hanya saja yang bebeda pada code kali ini adalah yang
dieksekusi yaitu hanya pada method message yang dieksekusi hal ini dikarenakan
method intro di protected yang berarti fungsi ini tidak dapat digunakan pada turunan
dari class mahasiswa.
b. PHP - Overriding Inherited Methods
Metode yang diwariskan dapat diganti dengan mendefinisikan ulang metode
(gunakan yang sama name) di kelas anak.
Lihat contoh di bawah ini. Metode __construct() dan intro() pada anak kelas
(ilham) akan mengganti metode __construct() dan intro() di kelas induk
(mahasiswa):
Syntax :
<!DOCTYPE html>
<html>
<body>

<?php
class mahasiswa {
public $nama;
public $jurusan;
public function __construct($nama, $jurusan) {
$this->name = $nama;
$this->jurusan = $jurusan;
}
public function intro() {
echo "Hallo, Perkenalkan nama saya {$this->name}
berasal dari jurursan {$this->jurursan}.";
}
}

class ilham extends mahasiswa {


public $nim;
public function __construct($nama, $jurusan, $nim) {
$this->name = $nama;
$this->jurusan = $color;
$this->nim = $nim;
}
public function intro() {
echo "Hallo, Perkenalkan nama saya {$this->name}
berasal dari jurusan {$this->jurusan} dengan NIM {$this-
>nim}";
}
}
$ilham = new ilham("Ilham Setiawan", "Sastra Mesin",
"Z1Q120069");
$ilham->intro();
?>

</body>
</html>
Output :

7. PHP OOP - Class Constants


Konstanta tidak dapat diubah setelah dinyatakan. Konstanta kelas dapat berguna jika Anda
perlu menentukan beberapa data konstan di dalamnya sebuah kelas.
Konstanta kelas dideklarasikan di dalam kelas dengan kata kunci .const Konstanta kelas
peka huruf besar/kecil. Namun, disarankan untuk memberi nama konstanta di semua huruf
besar. Kita dapat mengakses konstanta dari luar kelas dengan menggunakan nama kelas
diikuti oleh operator resolusi ruang lingkup () diikuti oleh konstanta nama, seperti di sini:::
Syntax :
<!DOCTYPE html>
<html>
<body>

<?php
class alert {
const SELAMAT = "Hello! And welcome to the Los Pollos Hermanos
family. My name is Gustavo, but you can call me Gus. I am thrilled
that you'll be joining our team. Each and every day, we serve our
customers.";
}

echo alert::SELAMAT;
?>

</body>
</html>
Output :

8. PHP OOP - Abstract Classes


Kelas dan metode abstrak adalah ketika kelas induk memiliki metode bernama, Tapi
membutuhkan kelas turunannya untuk mengisi tugas.
Kelas abstrak adalah kelas yang berisi setidaknya satu metode abstrak. Sebuah Metode
abstrak adalah metode yang dinyatakan, tetapi tidak diimplementasikan dalam kode. Kelas
atau metode abstrak didefinisikan dengan kata kunci :abstract
Syntax :
<?php
abstract class ParentClass {
abstract public function someMethod1();
abstract public function someMethod2($name, $color);
abstract public function someMethod3() : string;
}
?>
Saat mewarisi dari kelas abstrak, metode kelas anak harus didefinisikan dengan nama yang
sama, dan pengubah akses yang sama atau kurang dibatasi. Jadi, jika metode abstrak
didefinisikan sebagai dilindungi, metode kelas anak harus didefinisikan sebagai dilindungi
atau publik, tetapi tidak pribadi. Juga, jenis dan jumlah argumen yang diperlukan harus
sama. Namun, kelas anak mungkin memiliki opsional argumen sebagai tambahan.
Jadi, ketika kelas anak diwarisi dari kelas abstrak, kami memiliki aturan berikut:
• Metode kelas anak harus didefinisikan dengan nama yang sama dan
mendeklarasikan ulang metode abstrak induk
• Metode kelas anak harus didefinisikan dengan yang sama atau kurang dibatasi
Pengubah akses
• Jumlah argumen yang diperlukan harus sama. Namun, kelas anak mungkin
memiliki opsional Argumen Selain Itu
Mari kita lihat sebuah contoh:
<!DOCTYPE html>
<html>
<body>

<?php
// Parent class
abstract class mahasiswa {
public $nama;
public function __construct($nama) {
$this->name = $nama;
}
abstract public function intro() : string;
}

// Child classes
class data_il extends mahasiswa {
public function intro() : string {
return "Perkenalkan nama saya $this->name!";
}
}

class data_jum extends mahasiswa {


public function intro() : string {
return "Hallo, saya $this->name!";
}
}

class data_wal extends mahasiswa {


public function intro() : string {
return "Hello, Saya $this->name!";
}
}

// Create objects from the child classes


$data_il = new data_il("Ilham Setiawan");
echo $data_il->intro();
echo "<br>";

$data_jum = new data_jum("Jumarni");


echo $data_jum->intro();
echo "<br>";

$data_wal = new data_wal("Adam Wales");


echo $data_wal->intro();
?>

</body>
</html>
Output :

Kelas data_il, data_jum, dan data_wal diwarisi dari kelas mahasiswa. Ini berarti bahwa
Kelas data_il, data_jum, dan data_wal dapat menggunakan $nama publik properti serta
metode __construct() publik dari Kelas mobil karena warisan. Tapi, intro() adalah metode
abstrak yang harus didefinisikan pada semua anak kelas dan mereka harus mengembalikan
string.
9. PHP OOP - Interfaces
Antarmuka memungkinkan Anda untuk menentukan metode apa yang harus diterapkan
kelas. Antarmuka memudahkan untuk menggunakan berbagai kelas yang berbeda dengan
cara yang sama. Ketika satu atau lebih kelas menggunakan antarmuka yang sama, itu
disebut sebagai "polimorfisme". Antarmuka dinyatakan dengan kata kunci:interface
Syntax :
<?php
interface InterfaceName {
public function someMethod1();
public function someMethod2($name, $color);
public function someMethod3() : string;
}
?>
a. PHP - Interfaces vs. Abstract Classes
Antarmuka mirip dengan kelas abstrak. Perbedaan antara antarmuka dan kelas abstrak
adalah:

• Antarmuka tidak dapat memiliki properti, sedangkan kelas abstrak dapat


• Semua metode antarmuka harus bersifat publik, sedangkan metode kelas
abstrak bersifat publik atau dilindungi
• Semua metode dalam antarmuka bersifat abstrak, sehingga tidak dapat
diimplementasikan dalam kode dan kata kunci abstrak tidak diperlukan
• Kelas dapat mengimplementasikan antarmuka saat mewarisi dari kelas lain
secara bersamaan Waktu
b. PHP - Using Interfaces
Untuk mengimplementasikan antarmuka, kelas harus menggunakan kata kunci.
Implements. Kelas yang mengimplementasikan antarmuka harus
mengimplementasikan semua metode antarmuka.
Syntax :
<!DOCTYPE html>
<html>
<body>

<?php
interface mobil {
public function jenis();
}

class bmw implements mobil {


public function jeniS() {
echo "Convertible";
}
}

$mobil = new bmw();


$mobil->jenis();
?>

</body>
</html>
Output :

Dari contoh di atas, katakanlah kita ingin menulis perangkat lunak yang mengelola
nama – nama mobil yang ada. Ada tindakan bahwa semua mobil dapat melakukannya,
tetapi setiap mobil memiliki jenisnya tersendiri.
10. PHP OOP – Traits
PHP hanya mendukung warisan tunggal: kelas anak hanya dapat mewarisi dari satu orang
tua tunggal.
Jadi, bagaimana jika suatu kelas perlu mewarisi banyak perilaku? Sifat OOP memecahkan
masalah ini. Sifat digunakan untuk mendeklarasikan metode yang dapat digunakan di
beberapa kelas. Sifat dapat memiliki metode dan metode abstrak yang dapat digunakan
dalam beberapa kelas, dan metode dapat memiliki pengubah akses apa pun (publik,
pribadi, atau dilindungi).
Ciri-ciri dinyatakan dengan kata kunci:trait
Syntax :
<?php
trait TraitName {
// some code...
}
?>
Untuk menggunakan sifat dalam kelas, gunakan kata kunci :use
Syntax :
<?php
class MyClass {
use TraitName;
}
?>
Contoh :
<!DOCTYPE html>
<html>
<body>

<?php
trait web {
public function hamz() {
echo "My name is Walter Hartwell White. I live at 308 Negra
Aroya Lane, Albuquerque, New Mexico, 87104.";
}
}

class wow {
use web;
}

$wal = new wow();


$wal->hamz();
?>

</body>
</html>
Output :

Pertama diawali dengan mendeklarasikan sebuah sifat yang bernama “web”. Kemudian
dilanjutkan dengan membuat class yang bernama hamz, class ini bersifat public function
yang berarti dapat digunakan dimana saja. Disini pada sifat “web: ini, dilanjutkan dengan
membuat class wow yang dimana pada class ini mengambil sifat dari “web” dan semua
metode yang ada didalamnya.
11. PHP OOP - Static Methods
Metode statis dapat dipanggil secara langsung - tanpa membuat instance dari kelas dulu.
Metode statis dinyatakan dengan kata kunci :static
Syntax :
<?php
class ClassName {
public static function staticMethod() {
echo "Hello World!";
}
}
?>
Untuk mengakses metode statis gunakan nama kelas, titik dua ganda (::), dan Nama
metode:
Syntax :
ClassName::staticMethod();
Contoh :
<!DOCTYPE html>
<html>
<body>

<?php
class hello {
public static function sp() {
echo "My name is Walter Hartwell White. I live at 308 Negra
Arroyo Lane Albuquerque New Mexico 87104. This is my confession";
}
}

// Call static method


hello::sp();
?>

</body>
</html>
Output :

Mula – mula kita awali dengan mendeklarasikan static method :hello, yang didalamnya
terdapat public function sp. Kemudian kita dapat memanggil static method itu dnegan
menggunakan nama kelas titik dua ganda (::), dan nama metode.
12. PHP OOP - Static Properties
Properti statis dapat dipanggil secara langsung - tanpa membuat instance dari .class.
Properti statis dinyatakan dengan kata kunci:static
Syntax :
<?php
class ClassName {
public static $staticProp = "W3Schools";
}
?>
Untuk mengakses properti statis gunakan nama kelas, titik dua ganda (::), dan Nama
Properti:
ClassName::$staticProp;
Contoh :
<!DOCTYPE html>
<html>
<body>

<?php
class thr {
public static $thr_saya = "400.000";
}

// Get static property


echo thr::$thr_saya;
?>

</body>
</html>
Output :

Pertama kita awali dengan mendeklarasikan class thr yang dimana pada class ini berisi
public static $thr_saya. Kemudian nilai statis ini dipanggil dengan titik dua ganda (::) dan
nama property (tanpa membuat kelas pertama).
13. PHP Namespaces
Namespace adalah kualifikasi yang memecahkan dua masalah berbeda:
• Mereka memungkinkan organisasi yang lebih baik dengan mengelompokkan kelas
yang bekerja sama untuk melakukan tugas
• Mereka memungkinkan nama yang sama digunakan untuk lebih dari satu kelas
Misalnya, Anda mungkin memiliki sekumpulan kelas yang mendeskripsikan tabel HTML,
seperti Tabel, Baris, dan Sel sementara juga memiliki set kelas lain untuk menggambarkan
furnitur, seperti Tabel, Kursi dan Tempat Tidur. Namespace dapat digunakan untuk
mengatur kelas menjadi dua yang berbeda grup sambil juga mencegah dua kelas Tabel dan
Tabel tercampur.
a. Mendeklarasikan namespace
Namespace dideklarasikan di awal file menggunakan kata kunci :namespace
Syntax :
<?php
namespace Html;
?>
Konstanta, kelas, dan fungsi yang dideklarasikan dalam file ini akan menjadi milik
namespace Html:
Contoh buat kelas tabel di namespace Html:
<?php
namespace Html;
class tabel {
public $judul = "";
public $jumbaris = 0;
public function pesan() {
echo "<p>tabel ini merupakan tabel '{$this->judul}'
memiliki {$this->jumbaris} baris.</p>";
}
}
$tabel = new Tabel();
$tabel->judul = "Mahasiswa Ilmu Komputer";
$tabel->jumbaris = 30;
?>

<!DOCTYPE html>
<html>
<body>

<?php
$tabel->pesan();
?>

</body>
</html>
Output :

b. Menggunakan namespace
Kode apa pun yang mengikuti adeclaration beroperasi di dalam namespace
layanan, jadi Kelas yang termasuk dalam namespace dapat digunakan tanpa
kualifikasi apa pun. Untuk mengakses kelas dari luar namespace, kelas harus
memiliki namespace yang dilampirkan untuk itu.namespace
Syntax :
<?php
namespace Code\Html;
?>
14. PHP Iterables
Dapat diulang adalah nilai apa pun yang dapat diulang dengan aloop.foreach(). Thepseudo-
type diperkenalkan di PHP 7.1, dan dapat digunakan sebagai tipe data untuk argumen dan
fungsi fungsi mengembalikan nilai .iterable
Kata kunci dapat digunakan sebagai tipe data dari argumen fungsi atau sebagai
pengembalian Jenis fungsi :iterable
Contoh :
<!DOCTYPE html>
<html>
<body>
<?php
function cetakini(iterable $myIterable) {
foreach($myIterable as $item) {
echo $item;
}
}

$arr = ["i", "l", "h", "a", "m"];


cetakini($arr);
?>
</body>
</html>
Output :

Anda mungkin juga menyukai