Kompetensi Dasar :

3.14 Menerapkan library standar dalam program

4.14 Menggunakan library standar dalam program

Materi Pokok :

1. Library dalam aplikasi program.

2. Menerapkan library dalam perangkat lunak server side.

Mengenal Library Dalam PHP

Library adalah script atau kode program yang berisi variabel, konstanta, tipe data, object dan function-function yang ditulis seseorang atau sekelompok orang sehingga orang lain bisa "menambahkannya" dalam script atau program yang mereka buat.



Dengan library, seseorang bisa mempersingkat script atau kode program mereka tanpa perlu membuat function atau algoritmanya sendiri. Mereka cukup menggunakan function-function atau mungkin object yang sudah terdapat di dalam library. Dengan library, kita bebas menentukan seperti apa susunan script atau kode program kita karena library memang hanya memberikan "jalan pintas" untuk mempermudah penulisan script atau kode program.

Contoh library PHP yang bisa kita gunakan misalnya :

  • FPDF
  • Snappy
  • Image Workshop
  • Goutte
  • Carbon
  • DLL.



  • Standard PHP Library (SPL)

    Standard PHP Library (SPL) memiliki struktur data baru yakni :

  • SplObjectStorage untuk menampung object.
  • Kelebihan dari SplObjectStorage dibandingkan dengan array biasa adalah menjaga tidak ada object ganda, menghapus sebuah object dari struktur data, cukup dengan memanggil detach($object).

  • SplQueue untuk mewakili queue.
  • SplStack untuk mewakili stack.
  • SplDoublyLinkedList untuk mewakili doubly linked list.
  • SplHeap untuk mewakili tree dan sebagainya.Selain itu.




  • FilesystemIterator


    Standard PHP Library (SPL) juga menyediakan beberapa iterator yang dipakai dalam perulangan foreach. Sebagai contoh, ada FilesystemIterator yang dapat dipakai untuk menjelajahi sebuah direktori.

    Kode program berikut akan menampilkan nama dan ukuran file/direktori di root direktori drive C:


    $it = new FileSystemIterator("C:"); foreach ($it as $fileinfo) {    printf("%30s%20u\n", $fileinfo->getFilename(),       $fileinfo->getSize());     }


    CallbackFilterIterator


    Sebuah iterator dapat di-filter lagi menggunakan CallbackFilterIterator. Sebagai contoh, script diatas menyaring hasil FilesystemIterator diatas agar hanya mengembalikan nama file dan mengabaikan direktori, dengan kode program seperti:


    $it = new CallbackFilterIterator(new FilesystemIterator("C:"),    function($current, $key, $iterator) {       return $iterator->isFile();    } ); foreach ($it as $fileinfo) {    printf("%30s%20u\n", $fileinfo->getFilename(),       $fileinfo->getSize());     }


    LimitIterator


    LimitIterator dapat dipakai untuk membatasi iterator lainnya. Sebagai contoh, pada kode program dibawah ini, ArrayIterator seharusnya melakukan perulangan sebanyak 15 kali, tetapi LimitIterator menyebabkan perulangan hanya 10 kali saja:


    $array = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]; $it = new LimitIterator(new ArrayIterator($array), 0, 10); foreach ($it as $i) {    print "$i\n"; }

    Semua class yang mengimplementasikan interface Countable dapat dipakai dengan fungsi sizeof() dan count(). Selain itu, dapat mengimplementasikan Iterator sehingga class dapat dipakai pada struktur foreach.



    IteratorAggregate


    Alternatif lainnya, bila sudah memiliki iterator di dalam class, dapat mengekposnya dengan mengimplementasikan interface IteratorAggregate. Contoh, pada kode program berikut ini, class Pembelian dapat dipakai pada sizeof()/count() dan juga mendukung perulangan dengan foreach:


    class Pembelian implements Countable, IteratorAggregate {       public $items;       public function __construct() {         $this->items = new SplObjectStorage();     }       public function tambahItem($kodeBrg, $jumlah) {         $this->items->attach(new Item($kodeBrg, $jumlah));                }       public function count() {         $i=0;         foreach ($this->items as $item) {             $i+=$item->jumlah;         }                   return $i;              }       public function getIterator() {       // SplObjectStorage juga adalah sebuah Iterator         return $this->items;         }   }   class Item {       public $kodeBrg;     public $jumlah;       public function __construct($kodeBrg, $jumlah) {         $this->kodeBrg = $kodeBrg;         $this->jumlah = $jumlah;     }   }   $invoice = new Pembelian; $invoice->tambahItem("BRG1", 10); $invoice->tambahItem("BRG2", 20);   $jumlah = count($invoice); print "Jumlah barang dalam invoice adalah $jumlah\n\n";   print "Daftar item di invoice adalah:\n"; foreach ($invoice as $item) {     print "{$item->kodeBrg} {$item->jumlah}\n"; }


    ArrayAccess


    Hal yang lebih menarik lagi adalah dengan mengimplementasikan interface ArrayAccess, sehingga dapat membuat class menjadi seperti array. Sebagai contoh, membuat instance dari class Pembelian di atas dapat diakses seperti array, misalnya: $p[0] akan mengembalikan item pembelian pertama, $p[1] akan mengembalikan item pembelian kedua, dan seterusnya. Untuk itu, ubah kode program menjadi seperti berikut ini:


    class Pembelian implements Countable, IteratorAggregate, ArrayAccess {      ...            public function offsetExists($offset) {         return $offset < ($this->items->count() - 1);          }       public function offsetGet($offset) {         $this->items->rewind();         foreach($this->items as $item) {             if ($this->items->key() == $offset) {                 return $item;             }         }                       return null;     }       public function offsetSet($offset, $value) {                // tidak diimplementasikan     }       public function offsetUnset($offset) {         // tidak diimplementasikan          }   }   ...   print "Item #1: {$invoice[0]->kodeBrg} \n"; print "Item #2: {$invoice[1]->kodeBrg}\n"; 


    SplSubject dan SplObserver

    Pada design pattern di PHP, sebuah subject class dapat memiliki satu atau lebih class lain sebagai observer. Kemudian saat subject class memberikan notifikasi dengan memanggil notify(), maka method update pada seluruh class observer akan dikerjakan.


    Contoh penggunaan observer design pattern dapat dilihat di view Griffon (untuk melakukan binding) seperti saat JTextField berubah nilainya (user mengetik), maka nilai property di model akan di-update sesuatu dengan apa yang diketik.


    Untuk melakukan operasi file secara OOP, SPL menyediakan class SplFileInfo, SplFileObject dan SplTempFileObject. Sebagai contoh, kode program berikut ini akan membuat file baru:


    $file = new SplFileObject('C:/test.txt', 'w+'); $file->fwrite("Ini adalah isi file!"); $file->fflush();

    SPL juga menyediakan class ArrayObject untuk memakai array di PHP secara OOP. Berikut ini adalah contoh kode program yang memakai ArrayObject:


    $arr = new ArrayObject([1,7,3,1,2,6,8,3,4,5]); $arr->asort();   foreach ($arr as $i) print "$i "; // output: 1 1 2 3 3 4 5 6 7 8   print "\n{$arr->count()}\n"; // output: 10   $arr->append(11); $arr[] = 12; foreach ($arr as $i) print "$i "; // output: 1 1 2 3 3 4 5 6 7 8 11 12   print "\n{$arr->offsetGet(10)}\n"; print "{$arr[10]}\n"; // output: // 11 // 11   $arr->offsetUnset(5); $arr->offsetUnset(4); foreach ($arr as $i) print "$i "; // output: // 1 1 3 3 4 5 7 8 11 12