Arsip mwmag[Files]  [Up]© 2002 PT Masterweb Media

Reusing Kode PHP

  1. Tentang Reusing Kode
  2. Menggunakan require() dan include()
  3. Shopping Cart? Mudah!
  4. Kalau Ada require(), Buat Apa include()?
  5. Checkout
  6. Ekstensi File pada require() dan include()
  7. require_once() dan include_once()
  8. Penutup

Figures

  1. Keluaran dua.php
  2. Alur alir shopping cart
  3. Keluaran list.php
  4. Detail ponsel ber-id 0
  5. require() untuk header dan footer
  6. Keluaran show.php
  7. Keluaran show.php?id=0
  8. Keluaran checkout.php

Files

  1. source.zip

 

Oleh Eris Ristemena

Pemrograman adalah sebuah pekerjaan yang sulit. Tiap kali ada keluhan dari klien tentang program yang Anda buat maka Anda adalah orang pertama yang akan dicari. Jika ada kesalahan pada program yang Anda buat, maka Anda adalah orang pertama yang disalahkan. Programer memang profesi yang berat. Oleh karena itu, mulailah untuk memanjakan diri Anda dengan kemudahan dan kemudahan yang disediakan PHP.

Tentang Reusing Kode

Jika kebetulan Anda membaca text book tentang rekayasa perangkat lunak atau software engineering, Anda akan sering menemukan kata-kata “code reuse” atau penggunaan ulang kode/skrip. Mengapa hal ini begitu penting? Yang jelas bukan karena programer itu pemalas. Setidaknya ada tiga hal yang mendasari mengapa kita butuh reuse:

Biaya. Meskipun ini tugas manager, tapi sebagai programer sebaiknya Anda juga mengerti mengapa Anda harus menyelesaikan tugas dengan cepat. Karena semakin lama Anda menyelesaikan pekerjaan, semakin membengkak dana yang harus dikeluarkan. Ini biasanya berkait dengan kontrak kerja dengan klien. Code reuse diyakini sebagai metode untuk mempercepat pekerjaan kita selaku programer, karena daripada kita harus memulai segala sesuatu dari nol, akan lebih cepat kalau kita gunakan skrip yang sudah ada lalu modifikasi pada beberapa bagian.

Reliabilitas. Kode yang sudah pernah digunakan sebelumnya biasanya memiliki dua kemungkinan, bisa berhasil dengan baik atau gagal sama sekali. Dan keduanya membawa hal positif bagi kode Anda sekarang. Mengapa? karena Anda jadi tahu kalau skrip Anda butuh perbaikan. Inilah kata kuncinya: perbaikan. Sehingga code reuse diyakini dapat meningkatkan kualitas program Anda, karena mengacu pada alasan pertama, dengan waktu kita yang lebih longgar biasanya banyak hal baru yang terpikirkan di benak kita.

Konsistensi. Setiap programer memiliki style ataupun framework sendiri dalam mengerjakan sebuah program. Dalam sebuah kerja tim yang melibatkan beberapa programer, konsistensi pada satu framework adalah sangat dibutuhkan, dan ini bisa direalisasikan dengan penggunaan ulang kode yang sama untuk satu bagian tertentu dari keseluruhan proyek.

Menggunakan require() dan include()

PHP menyediakan dua buah perintah yang memungkinkan Anda menggunakan ulang skrip yang telah dibuat, yaitu require() dan include(). Dengan dua perintah ini Anda dapat menyertakan file PHP seolah ia adalah bagian dari file yang menyertakannya.

Sebagai contoh, jika saya memiliki skrip dalam file bernama satu.php seperti berikut:

<?php
   echo "Teks ini berasal dari file satu.php<br>";
?>

maka saya dapat menyertakan file satu.php ke dalam file dua.php menggunakan require() seperti berikut:

<?php
   require("satu.php");
   echo "Teks ini berasal dari file dua.php<br>";
?>

yang akan menampilkan halaman seperti Gambar 1.


Fig 1. Keluaran dua.php

Perhatikan bahwa require() (dan juga include()) tidak mempertahankan parser di mode PHP untuk file yang disertakan, tetapi keluar kembali ke mode HTML, yang artinya Anda harus menyertakan tag <?php .. ?> di file satu.php untuk menjalankan kode-kode PHP, sebab kalau tidak maka skrip yang Anda buat akan tercetak di halaman web. Tidak percaya? silahkan coba sendiri.

Tentu saja kita tidak akan menggunakan require() untuk pekerjaan sesederhana itu. Program berikutnya mungkin dapat memberi gambaran lebih masuk akal mengapa kita butuh reusing kode.

Shopping Cart? Mudah!

Pada banyak aplikasi, kita sering kali dituntut untuk menggunakan sekumpulan data yang sama pada beberapa halaman yang berbeda. Dalam aplikasi shopping cart misalnya, data yang biasanya berasal dari query database diperlukan pada beberapa halaman berbeda. Sebagai contoh adalah seperti terlihat pada Gambar 2. data.php adalah file berisi data yang akan digunakan pada dua halaman berbeda, yaitu list.php dan detail.php. Di mana list.php menampilkan list keseluruhan produk yang akan dijual, sementara detail.php adalah untuk menampilkan info lebih lengkap dari produk tertentu.


Fig 2. Alur alir shopping cart

Masih bingung? Baiklah, saya akan membuat sebuah contoh shopping cart untuk menjual ponsel melalui web commerce. Untuk itu, data.php saya isi dengan data berikut (mudah-mudahan Anda belum lupa dengan tutorial sebelumnya mengenai array):

<?php
  $data[0]['vendor'] = "Samsung";
   $data[0]['desc']   = "Sleek and compact design; large display; GPS ready; " .
                        "analog roaming; solid battery life; accepts downloadable " .
                        "ring tones and images.";
   $data[0]['merk']   = "SPH-A400";
   $data[0]['price']  = 199;
   $data[0]['image']  = "<img src=\"images/spha400.gif\">";
 
   $data[1]['vendor'] = "Kyocera";
   $data[1]['desc']   = "Palm OS-based phone; superior screen; MP3 playback;" .
                        "Keypad rather than keyboard.";
  $data[1]['merk']   = "Kyocera 7135";
   $data[1]['price']  = 500;
   $data[1]['image']  = "<img src=\"images/kyocera7135.gif\">";
 
  $data[2]['vendor'] = "Ericsson";
  $data[2]['desc']   = "Affordable; large screen; works on GPRS networks;" .
                       "comes with an extra faceplate; good battery life;" .
                      "wireless Web access.";
  $data[2]['merk']   = "T61z";
  $data[2]['price']  = 100;
  $data[2]['image']  = "<img src=\"images/t61z.gif\">";
?>

jangan khawatir dengan gambar tiap ponsel, Anda dapat menggantinya dengan gambar yang lain (dan juga data yang lain), atau pakai saja gambar yang disertakan di CD mwmag (Gambar-gambar ini dapat diambil juga di situs mwmag.com).

Sementara list.php (yang menggunakan data di atas) berisi:

<form method="POST" action="show.php?checkout=1">
  <table>
    <tr>  
 
  <?php
    include("data.php");
    foreach( $data as $k=>$v)
    {
      echo "<td><table cellspacing=1 cellpadding=4 bgcolor=\"#000000\">";
      echo "<tr bgcolor=\"#FFFFFF\"><td align=\"center\"><b>$v[merk]</b></td></tr>";
      echo "<tr bgcolor=\"#FFFFFF\"><td align=\"center\">";
      echo "<a href=\"show.php?id=$k\">$v[image]</a>";
      echo "</td></tr>";
      echo "<tr bgcolor=\"#FFFFFF\"><td align=\"center\">price : \$ $v[price]</td></tr>";
      echo "<tr bgcolor=\"#FFFFFF\"><td align=\"center\">qty :
<input type=text name=qty[$k] size=4></td></tr>";
      echo "</table></td>";
    }
  ?>
 
    </tr>
    <tr><td><input type="submit" value="checkout"></td></tr>
  </table>
</form>

Anda dapat langsung mencobanya yang seharusnya menampilkan halaman seperti terlihat pada Gambar 3. Sudah terbayang maksud saya? Di halaman ini, pembeli akan memasukkan jumlah dari tiap ponsel yang akan dibeli, setelah itu dengan menekan tombol checkout akan tampil rincian biaya yang harus ia keluarkan. (Ups, untuk yang terakhir belum kita buat di sini; tenang saja, kita akan kerjakan pada bagian berikutnya).


Fig 3. Keluaran list.php

Berikutnya untuk file detail.php saya isi dengan:

<table>
  <tr>
  <?php
    include("data.php");
    echo "<td><table cellspacing=1 cellpadding=4 bgcolor=\"#000000\" height=\"100%\">";
    echo "<tr bgcolor=\"#FFFFFF\"><td align=\"center\"><b>{$data[$id][merk]}</b></td></tr>";
    echo "<tr bgcolor=\"#FFFFFF\"><td align=\"center\">{$data[$id][image]}</td></tr>";
    echo "<tr bgcolor=\"#FFFFFF\"><td align=\"center\">{$data[$id][desc]}</td></tr>";
    echo "</table></td>";
?>
  </tr>
</table>

Halaman ini bertujuan untuk menampilkan informasi lebih lengkap dari masing-masing ponsel (yaitu ponsel dengan id tertentu). Pembeli tentu tidak akan membeli ponsel Anda begitu saja dengan hanya melihat halaman seperti Gambar 3; Anda harus memperlihatkan fitur yang dimiliki ponsel yang Anda jual atau informasi tambahan lainnya untuk meyakinkan pembeli. Oleh karena itu kita butuh halaman lain, dalam hal ini adalah detail.php.

Untuk mengakses halaman ini Anda harus menyertakan id nya pada URL, seperti http://10.14.248.111/~jagoan/tutorial/3.2/detail.php?id=0, yang akan menampilkan informasi ponsel dengan id = 0 yaitu ponsel bermerk SPH-A400, seperti terlihat pada Gambar 4. Benar-benar mudah bukan?


Fig 4. Detail ponsel ber-id 0

Coba perhatikan lagi file list.php dan detail.php, sekarang saya menggunakan include() (bukan require()), dan hasilnya persis seperti yang kita harapkan, yang akan sama jika Anda menggantinya dengan require().

Kalau Ada require(), Buat Apa include()?

Biarpun require() dan include() memiliki kesamaan dalam hal kemampuannya menyertakan file, namun ada satu perbedaan mendasar di antara keduanya. File yang menjadi argumen include() hanya akan disertakan manakala perintahnya dieksekusi, sementara require() akan menyertakan file yang menjadi argumennya sebelum keseluruhan kode dieksekusi sehingga file tetap disertakan biarpun kodenya tidak pernah dieksekusi. Kalau Anda pernah menggunakan C/C++ sebelumnya, require() ini mirip dengan pragma #include preprosesor.

Untuk jelasnya perhatikan kode berikut:

<?php
   switch ($tanggal)
{
case 1 :
require("file1.php");
break;
 
case 2 :
require("file2.php");
break;
 
case 3 :
require("file3.php");
break;
 
default :
require("file4.php");
break;
}
?>

Persyaratan switch() di atas hanya akan mengeksekusi satu saja dari keempat persyaratan yang mungkin. Namun karena require() yang digunakan di sini maka file1.php, file2.php, file3.php dan file4.php tetap disertakan biarpun hanya satu dari keempat file tersebut yang dipakai. Beda halnya jika kita menggunakan include() yang hanya menyertakan file yang benar saja. Jika server Anda termasuk server dengan beban yang tinggi, maka penggunaan include() pada kasus seperti ini akan terasa lebih cepat ketimbang require().

Jadi, pastikan terlebih dahulu bagaimana atau dalam kondisi apa Anda akan menyertakan sebuah file. Jika file yang disertakan tidak berada dalam kondisi persyaratan tertentu (seperti if..else atau switch), maka pastikan Anda hanya menggunakan require(). Sebab, pada kasus ini justru require() akan lebih cepat dari include(), walaupun memang perbedaannya tidak begitu signifikan jika file yang Anda sertakan tidak begitu besar dan beban server Anda tidak begitu tinggi.

Contoh penggunaan require() yang paling sering ditemukan adalah manakala Anda harus menyertakan sekian baris HTML pada beberapa halaman yang berbeda. Ini biasanya dilakukan pada situs besar dan sering berubah tampilan, di mana satu halaman dipecah-pecah dalam beberapa bagian, seperti header, footer, dan konten. Karena header dan footer selalu dipakai pada tiap halaman maka file ini dibuat dalam file terpisah yang disertakan (menggunakan require()) pada halaman utama yang membutuhkan. Untuk jelasnya perhatikan Gambar 5. Karena file-file ini hanya berisi skrip HTML biasa maka Anda tidak perlu menggunakan include().


Fig 5. require() untuk header dan footer

Sebagai ilustrasi, mari kita perbaiki halaman shopping cart di atas. Saya akan mempercantik halamannya dengan skrip HTML berikut pada bagian header, kita beri nama saja dengan header.inc:

<table width="100%" border="0">
<tr bgcolor="#FF3300">
  <td><img src="images/logo.gif" width="142" height="42"></td>
</tr>
</table>

lalu pada bagian footer dengan nama footer.inc seperti berikut:

<table width="100%" border="0">
<tr bgcolor="#FF3300">
  <td>&nbsp;</td>
</tr>
</table>

Kemudian untuk membuatnya lebih rapih, saya letakan kedua file ini pada direktori include. Dan mungkin Anda tidak memperhatikannya, sampai sini kita belum menyertakan kode header dan footer HTML nya sendiri (seperti <html>, <body> dan seterusnya), oleh karena itu saya buat file dengan nama HTML_atas.inc yang berisi:

<html>
<head>
<title>HP dot com</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF">

dan file HTML_bawah.inc yang berisi:

</body>
</html>

kemudian keduanya juga saya simpan pada direktori include. Nah, sekarang kita buat file baru yang saya beri nama show.php yang menyertakan file-file yang telah kita buat, skripnya adalah sebagai berikut:

<?php
 
    require("include/HTML_atas.inc");
    require("include/header.inc");
    
    if ( isset($id) )
    {
      include("detail.php");
    }
    elseif ( isset($checkout) )
    {
      include("checkout.php");
    }
    else
    {
      include("list.php");
    }
 
    require("include/footer.inc");
    require("include/HTML_bawah.inc");
?>

Perhatikan kembali file show.php, di sini saya menggunakan include() di dalam persyaratan if..else dan require() pada selainnya, sesuai dengan argumentasi yang saya jelaskan sebelumnya (sekali lagi, jangan perhatikan dulu file checkout.php, kita akan membuatnya sebentar lagi). Dengan file show.php seperti ini, kita bisa mengakses halaman daftar handphone dan info detail tiap handphone yang telah kita buat sebelumnya masing-masing dengan http://10.14.248.111/~jagoan/tutorial/3.2/show.php (terlihat pada Gambar 6) dan http://10.14.248.111/~jagoan/tutorial/3.2/show.php?id=0 (terlihat pada Gambar 7). Dan, oh ya, sekarang Anda cukup mengklik gambar ponsel untuk mengetahui detailnya. Lumayan kan?


Fig 6. Keluaran show.php


Fig 7. Keluaran show.php?id=0

Checkout

Sebagai ilustrasi dari penjelasan sebelumnya, mari kita kembali ke shopping cart di atas. Seperti yang saya janjikan, di sini kita akan membuat file checkout.php yaitu halaman untuk menampilkan rincian biaya yang harus dikeluarkan pembeli setelah ia menentukan ponsel yang dibeli beserta jumlahnya masing-masing. Skripnya adalah sebagai berikut:

<table width="100%" bgcolor="#000000" cellpadding=5 cellspacing=1>
    <tr bgcolor="#CCCCCC">
      <td align="center"><b>Merk</b></td>
      <td align="center"><b>Harga</b></td>
      <td align="center"><b>Qty</b></td>
      <td align="center"><b>Total</b></td>
    </tr>
 
  <?php
    include("data.php");
    $total = 0;
    foreach ( $qty as $k=>$v )
    {
      if ( !empty($qty[$k]) )
      {
        $subtotal = $data[$k][price] * $qty[$k];
        $total+=$subtotal;
        echo "<tr bgcolor=\"#FFFFFF\">";
        echo "<td>{$data[$k][merk]}</td>";
        echo "<td align=\"right\">$ " . number_format($data[$k][price]) . "</td>";
        echo "<td align=\"right\">" . $qty[$k] . "</td>";
        echo "<td align=\"right\">$ ". number_format($subtotal) . "</td>";
        echo "</tr>";
      }
    }
    echo "<tr bgcolor=\"#FFFFFF\" align=\"right\"><td colspan=3>Total</td>";
    echo "<td>$ ". number_format($total) . "</td></tr>";
  ?>
</table>

Tidak ada yang baru di file chekout.php ini, kecuali saya menambahkan fungsi PHP number_format() untuk memformat bilangan. Sekarang, coba akses URL http://10.14.248.111/~jagoan/tutorial/3.2/show.php, lalu masukkan jumlah ponsel yang ingin Anda beli lalu tekan tombol checkout. Halaman seperti Gambar 8 akan tampil. Ah, mudah bukan?


Fig 8. Keluaran checkout.php

Ekstensi File pada require() dan include()

Anda dapat menyertakan file berekstensi apapun menggunakan require() dan include(). Bahkan beberapa programer yang cinta kerapian—seperti saya—suka sekali memberi nama file dengan ekstensi .inc seperti config.inc atau file.inc sekedar menunjukkan kalau file tersebut tidak banyak berguna jika berdiri sendiri (yaitu ekstensinya bukan .php tetapi di dalamnya berisi kode PHP atau HTML murni seperti file HTML_atas.inc dan HTML_bawah.inc yang saya buat di atas, file-file seperti ini dalam perencanaannya memang tidak untuk berdiri sendiri melainkan harus disertakan pada file PHP lain menggunakan require() atau include()). Penamaan file seperti ini berguna sekali manakala jumlah file yang mesti Anda urus mencapai puluhan bahkan ratusan buah, walaupun sebenarnya ada cara lain untuk ini yaitu dengan mengelompokkan file-file tersebut ke direktori khusus seperti direktori include yang saya buat di atas. (Nah, sudah lihat kan? Saya memang cinta kerapian.)

Sekilas memang ide penamaan file ini cukup pintar, tetapi saya perlu ingatkan di sini, terkadang sesuatu yang pintar bisa menjadi sangat riskan. Alasannya sederhana saja, secara default, file berekstensi .inc tidak dikenali web server sebagai file PHP sehingga parser PHP tidak akan diaktifkan. Yang artinya, pengunjung yang mengakses file tersebut melalui web server Anda biasanya akan diberikan kotak dialog untuk mendownload file tersebut, yang artinya siapapun dapat mengetahui isi file Anda.

Jika file tersebut berisi informasi penting seperti:

<?php
$DB_username = "root";
$DB_password = "diapikirdiapintar";
$DB_host = "db.foolme.net";
?>

maka siap-siap saja untuk diceramahi bos Anda.

Jika Anda mendiskusikan hal ini ke mailing list PHP di Indonesia seperti id-php@yahoogroups.com biasanya Anda akan disarankan untuk mengganti seluruh file berekstensi .inc ke ekstensi .php atau .inc.php dengan alasan kurang lebih seperti yang saya jelaskan di atas. Lalu biasanya beberapa master PHP yang bijak akan memberikan solusi lain untuk mengatasi hal ini tanpa mengubah ekstensi file apapun, yaitu dengan menambahkan konfigurasi berikut pada web server Anda:

AddType application/x-httpd-php .php .inc

Pendapat saya? Keduanya sama-sama tepat untuk dipakai.

require_once() dan include_once()

Terakhir yang perlu Anda ketahui adalah perintah require_once() dan include_once(). Seperti jelas dari namanya, perintah ini sama dengan require() dan include() sebelumnya; hanya saja file yang disertakan hanya disertakan sekali saja, artinya jika dalam satu file Anda secara tidak sengaja menyertakan sebuah file lain dua kali atau lebih, maka hanya file pertama saja yang disertakan. Sebagai ilustrasi, jika saya punya file bernama file.php yang berisi skrip berikut:

<?php
include("file2.php");
include("file3.php");
?>

Jika file1.php berisi:

<?php
include("data.php");
echo "ini file 1";
?>

dan file2.php berisi:

<?php
include("data.php");
echo "ini file 2";
?>

maka file.php sama saja berisi:

<?php
include("data.php");
echo "ini file 1";
include("data.php");
echo "ini file 2";
?>

di mana file data.php disertakan dua kali. Tergantung dari isi file data.php tersebut, skrip seperti ini jelas tidak efisien bahkan bisa jadi memunculkan pesan error jika di dalamnya terdapat function (kita akan pelajari pada tutorial berikutnya). Untuk itu Anda dapat memodifikasi file.php menjadi:

<?php
include_once("file2.php");
include_once("file3.php");
?>

yang pada kasus kita akan sama dengan:

<?php
include("data.php");
echo "ini file 1";
echo "ini file 2";
?>

Perhatikan bagaimana file data.php hanya disertakan sekali saja.

Penutup

Pada tutorial kali ini Anda telah mempelajari bagaimana cara menyertakan skrip PHP pada sebuah file untuk digunakan secara berulang-ulang pada file lainnya. Kalau saja Anda lupa dengan kata pembuka saya di atas, inilah yang saya maksud dengan reusing code. Mungkin ilustrasi yang diberikan sepanjang tutorial ini kurang begitu menampilkan keunggulan dari metode reusing code, tapi kalau Anda terus mengikuti tutorial berseri PHP, saya jamin Anda akan semakin menikmati bagaimana PHP membuat pekerjaan kita lebih mudah yang berarti tidur kita bisa lebih panjang. Wassalam.

Eris Ristemena programer PHP freelance yang kini sering mondar-mandir Bandung-Lampung. Dapat dihubungi di ristemena@mwmag.com.

mw

[Last-Modified: Mon Aug 19 21:01:20 2002]

Arsip mwmag[Files]  [Up]www.master.web.id/mwmag