Tutorial

Tutorial PHP Magic Method __wakeup()

Diposting oleh I. B. Gd Pramana A. Putra pada 13 Feb 22, diperbarui pada 19 May 22

Pada bagian __wakeup() PHP ini, kita akan belajar mengenal dan memahami kegunaan __wakeup() pada PHP, dan apa yang membuatnya berbeda dari __sleep() PHP.


Pengertian Method __wakeup() PHP


Wakeup pada bahasa pemrograman PHP adalah salah satu magic method yang akan terpanggil/dijalankan saat suatu obyek dilakukan diserialisasi (unserialize).


Diserialisasi digunakan untuk melakukan rekrontuksi ulang pada suatu obyek yang tadinya dilakukan serialisasi.


Pada saat suatu obyek dilakukan serialisasi, interpreter akan mengecek apakah suatu class mendefinisikan method wakeup. Jika iya (ada), maka method __wakeup akan melakukan rekontruksi ulang sesuai definisi yang diterapkan di dalam method wakeup tersebut.


Penerapan Method __wakeup() PHP


Deklarasi method __wakeup() PHP:


__wakeup ( void ) : void


Format di atas memberitahu kita bahwa method wakeup tidak menerima argumen apapun sebagai parameternya, dan method ini bertipe void.


Contoh Penggunaan Method __wakeup() PHP


Salah satu contoh yang paling cocok untuk penggunaan method wakeup adalah dengan class yang digunakan untuk berhubungan pada database. Contohnya class seperti ini:


<?php
    
class Connection
{
    protected $link;
    private $dsn, $username, $password;
    
    public function __construct($dsn, $username, $password)
    {
        $this->dsn = $dsn;
        $this->username = $username;
        $this->password = $password;
        $this->connect();
    }
    
    private function connect()
    {
        $this->link = new PDO($this->dsn, $this->username, $this->password);
    }
    
    public function __sleep()
    {
        return array('dsn', 'username', 'password');
    }
    
    public function __wakeup()
    {
        $this->connect();
    }
}


Pada class di atas, method __wakeup akan melakukan rekontruksi ulang, dalam hal ini method tersebut akan membangun kembali koneksi database yang mungkin telah hilang selama serialisasi dan melakukan tugas-tugas inisialisasi ulang lainnya, sesuai yang telah didefinsiikan pada method tersebut.


Contohnya yakni class tersebut akan memanggil $this->connect() setelah obyek dilakukan serialisasi atau saat koneksi ke database terputus karena serialisasi.


Dan contoh lainnya adalah kita akan menggunakan class FileReaders.php seperti pada Tutorial PHP Magic Method: __sleep.


<?php
// FileReaders.php


class FileReaders
{
    private $handle;
 	  private $filename;


    public function __construct($filename, $mode)	
    {
      $this->filename = $filename;
      $this->handle = fopen($filename, $mode);
	  }


    public function display()
    {
        echo fread($this->handle, filesize($this->filename));
    }
    
    public function __sleep()
    {
        return array(
          'filename' => $this->filename, 
          'arrx' => 'arrxy'
          );
    }
    
    public function __wakeup()
    {
        $this->display();
    }
}


Perhatikan pada class FilerReaders.php di atas, kita memanggil fungsi display() pada method __wakeup. Lalu kita akan membuatkan obyek dari class tersebut yang mana setelah itu kita lakukan serialisasi dan diserialisasi.


Kode untuk membuat obyek dari class tersebut, serialisasi obyek dan diserialisasi kembali adalah berikut:


<?php
    
require_once ("classes/FileReaders.php");

$readFile = new FileReaders('kodekativ.txt', 'r');
$serializedObject = serialize($readFile);

echo "Dump info of: object <br>";
var_dump($readFile);
echo "<br></br>";
echo "Dump info of: serialized object <br>";
var_dump($serializedObject);
echo "<br></br>";
echo "Dump info of: unserialized object <br>";
var_dump(unserialize($serializedObject));
echo "<br></br>";


Hasilnya

Atau kode-raw dari hasilnya di atas adalah:


Dump info of: object
object(FileReaders)#1 (2) { ["handle":"FileReaders":private]=> resource(4) of type (stream) ["filename":"FileReaders":private]=> string(13) "kodekativ.txt" }

Dump info of: serialized object
string(46) "O:11:"FileReaders":1:{s:13:"kodekativ.txt";N;}"

Dump info of: unserialized object
object(FileReaders)#2 (3) { ["handle":"FileReaders":private]=> NULL ["filename":"Fi


Perhatikan bahwa hasil dari “Dump info of: object” adalah obyek yang baru dibuat (tanpa diserialisasikan). Lalu hasil dari “Dump info of: serialized object” yakni sebuah string dengan nilai yang sudah diserialisasi.


Sementara itu hasil dari “Dump info of: unserialized object” adalah obyek yang tadinya dilakukan serialisasi, kemudian kembali disererialisasi (unserialize). Bisa dilihat bahwa hasil saat obyek baru dibuat (tanpa dilakukan serialisasi) sama dengan hasil saat obyek dilakukan serialisasi dan kembali dilakukan diserialisasi.


Obyek baru dibuat (tanpa serialisasi)


object(FileReaders)#1 (2) { ["handle":"FileReaders":private]=> resource(4) of type (stream) ["filename":"FileReaders":private]=> string(13) "kodekativ.txt" }


Obyek baru dibuat (setelah serialisasi, dan diserialisasi)


object(FileReaders)#2 (3) { ["handle":"FileReaders":private]=> NULL ["filename":"FileReaders":private]=> NULL ["kodekativ.txt"]=> NULL }


Referensi: Dokumentasi PHP - WakeUp

Tutorial yang saya buat ini memakan waktu yang cukup lama agar dapat membantumu belajar dan memingkatkan pemahamanmu terkait topik ini. Saya harap tutorial ini bermanfaat buatmu, kalau boleh traktir saya kopi atau makanan ringan ya agar lebih giat rilis tutorial gratis :)

Dukung saya dengan · paypal · buymeacoffee · ko-fi · trakteer
Jawaban & Respon
    Belum ada komentar

Login dulu

Kamu harus login terlebih dahulu sebelum memberikan komentar pada pos ini.