Membangkitkan Kenangan
Jika Anda masih juga membaca artikel bagian kelima ini, artinya Anda benar-benar
tangguh dan berkemauan kuat. Perjalanan yang cukup panjang dan melelahkan pada
bagian-bagian sebelumnya telah cukup banyak memberikan bekal bagi Anda untuk
membangun sendiri situs-situs dinamis dengan skrip PHP.
Pada bagian keempat, Anda telah melihat betapa PHP dapat digunakan untuk
mengakses basis data MySQL. PHP dapat menyimpan, mencari, memperbaiki, dan
menghapus informasi yang tersimpan pada basis data MySQL dengan sangat mudah
dan sederhana. Anda ternyata tidak perlu sering mengkerutkan kening Anda.
Memang inilah salah satu kekuatan PHP, kemudahan koneksi dengan basis data,
bukan hanya dengan basis data MySQL, tapi juga dengan banyak basis data populer
lainnya.
Dalam kenyataanya, kita sering mengalami bahwa data tidak tersimpan secara rapi
dalam baris dan kolom basis data, dan seringkali juga Anda harus menyimpan
suatu informasi dalam model file teks ASCII. Problem utama menjadi muncul,
karena ternyata Anda belum mengetahui caranya.
Ada tiga pilihan untuk menghadapi situasi ini. Pilihan pertama Anda dapat
menyuruh seseorang untuk memasukkan data-data tersebut ke dalam basis data.
Pilihan kedua Anda dapat mengangkat tangan sebahu dan kemudian menghela nafas
panjang sembari memutuskan untuk keluar dari pekerjaan Anda sekarang. Pilihan
yang lain, Anda dapat menggunakan PHP untuk menyelesaikan problem Anda.
Karena Anda telah menunjukkan ketangguhan Anda untuk belajar PHP, saya yakin
pilihan ketiga yang akan Anda ambil, dan inilah isi dari bagian kelima artikel
PHP? Siapa Takut!
Pada bagian akhir artikel terakhir ini, kita juga akan mempelajari mengenai
pembuatan fungsi-fungsi pada skrip PHP, yang akan membantu kemalasan kita untuk
menulis bagian skrip berulang-ulang. Kencangkan sabuk pengaman Anda, dan kita
masuki putaran final perjalanan kita.
Ditemukan Manuskrip Tua
Seperti juga bahasa pemrograman yang lain, PHP juga dilengkapi dengan fungsi-fungsi yang lengkap untuk menulis dan membaca file dengan mudah. Mari kita buat dulu sebuah file teks yang akan kita beri nama manuskrip.txt sebagai berikut.Jika kalian menemukan manuskrip ini, maka itulah tanda bahwa program protein kami telah berhasil membentuk kalian menjadi ras cerdas yang menguasai jagad raya ini, seperti harapan kami.
Sebelum Anda dapat menggunakan PHP untuk membaca isi dari file ini, Anda harus
memastikan bahwa Anda memiliki permission untuk membacanya. Pada sistem
berbasis Unix/Linux, hal ini dapat diyakinkan dengan perintah:
$ chmod 744 manuskrip.txt
Kini kita buat skrip PHP sederhana untuk membaca file tersebut dan menunjukkan
isi serta ukuran file:
<?php // baca file $ukuran_file = readfile("manuskrip.txt"); // tampilkan ukuran file echo "<br>Ukuran File = $ukuran_file byte."; ?>
Maka hasil tampilannya kurang lebih seperti ini.
Ukuran File = 681 byte.
Fungsi readfile() ternyata hanya sederhana tugasnya; membaca file dan
menampilkan isinya. Fungsi ini juga menghasilkan ukuran file yang kita tampilkan
pada skrip PHP di atas melalui perintah echo.
Begitu sederhananya, sehingga mungkin kita tidak akan begitu sering menggunakan
fungsi readfile(). Kita membutuhkan fungsi yang lebih berguna lagi,
yang selain melakukan apa yang dapat dilakukan fungsi readfile(), dapat
digunakan untuk memformat data yang dibaca. Cobalah gunakan fungsi
file() yang akan menghasilkan pembacaan file dalam bentuk variabel
array PHP. Setiap elemen pada variabel array tersebut mewakili
satu baris dalam file yang dibaca, dan jumlah elemen variabel array yang
ada akan menunjukkan jumlah baris dalam file. Skrip PHP berikut ini akan lebih
memberi kejelasan.
<?php // tentukan nama file yang akan dibaca $nama_file = "manuskrip.txt"; // baca file, masukkan ke array $isi = file($nama_file); // cari jumlah baris $jumlah_baris = sizeof($isi); echo "File $nama_file berisi $jumlah_baris baris.<p>"; // tampilkan hasil pembacaan baris per baris dengan perulangan for for ($i=0; $i<$jumlah_baris; $i++) { echo "Baris ".($i+1)." : <br>"; echo $isi[$i]."<br>"; } ?>
Pada skrip PHP di atas kita menggunakan fungsi file() untuk membaca
isi file yang ditunjuk oleh variabel $nama_file dan baris demi baris
isi file tersebut disimpan dalam variabel array $isi. Jumlah
elemen dari variabel $isi didapatkan dengan menggunakan fungsi
sizeof(), dan hasilnya disimpan dalam variabel $jumlah_baris.
Baris demi baris isi dari file yang tersimpan pada elemen-elemen variabel
array $isi ditampilkan dengan menggunakan perulangan
for.
Hasil dari skrip PHP di atas adalah sebagai berikut.
Baris 1 :
Beribu abad yang lalu, kami adalah ras cerdas yang hidup dan berkelana ke seluruh penjuru jagad raya ini. Ketika kami sampai pada masa di mana ras kami tidak mampu mempertahankan populasi dan menuju kepunahan, kami menciptakan sebuah program protein yang membawa kode genetik dasar ras kami. Protein ini mampu berevolusi selama ribuan abad sampai akhirnya akan membentuk ras cerdas serupa kami. Kami sebarkan program ini pada sistem-sistem planet yang mampu mendukung evolusi program kami.
Baris 2 :
Baris 3 :
Jika kalian menemukan manuskrip ini, maka itulah tanda bahwa program protein kami telah berhasil membentuk kalian menjadi ras cerdas yang menguasai jagad raya ini, seperti harapan kami.
Hilang Tak Berbekas
Skrip PHP di atas, semuanya dibuat dengan asumsi dasar bahwa file yang berusaha
dibaca oleh skrip PHP telah tersedia. Dalam kenyataannya bisa saja file yang
dimaksud tidak belum ada. Kondisi ini dapat menyebabkan waktu Anda terbuang
untuk mencari kesalahan program. Anda dapat menghindari kejadian semacam ini
dengan fungsi file_exists() yang dapat digunakan untuk menguji
keberadaan file dan menampilkan pesan kesalahan yang sesuai jika file tersebut
tidak ditemukan. Anda dapat dimodifikasi skrip PHP sebelumnya, sehingga menjadi
seperti berikut ini (perubahan ditunjukkan dengan huruf tebal).
<?php // tentukan nama file yang akan dibaca $nama_file = "manuskrip.txt"; // cek keberadaan file if (file_exists($nama_file)) { // baca file, masukkan ke array $isi = file($nama_file); // cari jumlah baris $jumlah_baris = sizeof($isi); echo "File $nama_file berisi $jumlah_baris baris.<p>"; // tampilkan hasil pembacaan baris per baris dengan perulangan for for ($i=0; $i<$jumlah_baris; $i++) { echo "Baris ".($i+1)." : <br>"; echo $isi[$i]."<br>"; } } else { echo "<b>File tidak ditemukan!</b>"; } ?>
Jalankan program di atas dengan sebelumnya mengganti nama file
manuskrip.txt atau dengan menghapus file tersebut. Maka pesan kesalahan
File tidak ditemukan! akan muncul pada browser Anda.
PHP juga menawarkan banyak fungsi yang dapat memberikan informasi lebih detil
mengenai keadaan sebuah file, berikut ini di antaranya:
- is_dir()
Untuk mengetahui apakah file yang ditunjuk merupakan direktori atau bukan. - is_link()
Untuk mengetahui apakah file yang ditunjuk merupakan file link. - is_executable()
Untuk mengetahui apakah file yang ditunjuk dapat dieksekusi dari shell. - is_readable()
Untuk mengetahui apakah file yang ditunjuk merupakan file yang dapat dibaca. - is_writable()
Untuk mengetahui apakah file yang ditunjuk merupakan file yang dapat ditulis. - fileowner()
Untuk mendapatkan id pengguna pemilik file. - filegroup()
Untuk mendapatkan id group pengguna pemilik file. - fileperms()
Untuk mendapatkan jenis permission dari suatu file. - filesize()
Untuk mendapatkan ukuran dari suatu file. - filetype()
Untuk mendapatkan jenis dari suatu file.
Fungsi-fungsi di atas sebagian besar hanya berarti pada implementasi PHP di
sistem file berbasis Unix/Linux. Anda tidak akan mendapatkan hasil yang akurat
jika fungsi-fungsi tersebut dijalankan pada sistem operasi lain, misalnya
MS Windows 9x atau NT/2000/XP.
Anda dapat mencoba skrip berikut ini pada sistem Unix/Linux Anda. Hasilnya
mungkin akan sangat berbeda jika Anda jalankan skrip ini pada sistem operasi
yang lain
<?php // tentukan nama file yang akan dibaca $nama_file = "manuskrip.txt"; // cek keberadaan file if (file_exists($nama_file)) { echo "Nama File : <b>$nama_file</b><br>"; // check apakah file merupakan direktori if (is_dir($nama_file)) { echo "File adalah direktori.<br>"; } // check apakah file merupakan link if (is_link($nama_file)) { echo "File adalah link.<br>"; } // check apakah file executable if (is_executable($nama_file)) { echo "File sifatnya executable.<br>"; } // check apakah file readable if (is_readable($nama_file)) { echo "File sifatnya readable.<br>"; } // check apakah file writable if (is_writable($nama_file)) { echo "File sifatnya writable.<br>"; } echo "Ukuran File : ".filesize($nama_file)."<br>"; echo "Pemilik File : ".fileowner($nama_file)."<br>"; echo "Group Pemilik File : ".filegroup($nama_file)."<br>"; echo "Permission File : ".fileperms($nama_file)."<br>"; echo "Jenis File : ".filetype($nama_file)."<br>"; } else { echo "<b>File tidak ditemukan!</b>"; } ?>
Pada sistem Unix/Linux, Anda akan mendapatkan hasil sebagai berikut:
File sifatnya readable.
File sifatnya writable.
Ukuran File : 681
Pemilik File : 538
Group Pemilik File : 100
Permission File : 33188
Jenis File : file
Pada sistem MS Windows 98, Anda kemungkinan akan mendapatkan hasil sebagai
berikut:
File sifatnya readable.
File sifatnya writable.
Ukuran File : 681
Pemilik File : 0
Group Pemilik File : 0
Permission File : 33206
Jenis File : file
Inikah, Tanda-tandanya...
Sampai sejauh ini kita masih selalu membicarakan masalah pembacaan file,
bagaimana dengan penulisan file? Penulisan file dalam PHP merupakan proses yang
lebih kompleks dan melibatkan pointer file. Pointer file selain
menandai file yang dibuka, juga memiliki informasi mengenai penanda letak/posisi
dalam sebuah file yang dibuka. Proses penulisan (maupun pembacaan) dilakukan
mulai pada posisi pointer file ini.
Fungsi yang akan kita gunakan untuk melakukan penulisan file adalah fungsi
fopen(), yang sesungguhnya juga dapat digunakan untuk pembacaan file.
Fungsi ini akan membuka sebuah pointer file, dan membutuhkan dua
parameter yaitu nama file dan mode untuk file yang akan dibuka. Mode ini juga
sekaligus menentukan posisi awal pointer file. Jenis-jenis mode pada
fungsi fopen() adalah:
- Mode Hanya Baca (read-only), diaktivasi dengan parameter "r". Mode ini akan menempatkan posisi pointer file pada awal file.
- Mode Hanya Tulis (write-only), diaktivasi dengan parameter "w". Mode ini akan membuat file baru dan menempatkan posisi pointer file pada awal file. Jika file yang dibuka telah ada, maka isi dari file tersebut langsung dihapus.
- Mode Baca-Tulis (read-write), diaktivasi dengan parameter "r+". File dibuka untuk dapat dibaca maupun ditulis. Posisi pointer file adalah pada awal file.
- Mode Tambahkan/Append (hanya tulis), diaktivasi dengan parameter "a". Pada mode ini, posisi pointer file adalah pada akhir dari file yang akan memudahkan kita untuk menambah/menyambung data ke data yang telah ada. Jika file yang dimaksud tidak ditemukan, maka file yang baru akan langsung dibuat.
- Mode Tambahkan/Append (baca/tulis), diaktivasi dengan parameter "a+". Pada mode ini, posisi pointer file juga pada akhir dari file yang akan memudahkan kita untuk menambah/menyambung data ke data yang telah ada. Jika file yang dimaksud tidak ditemukan, maka file yang baru akan langsung dibuat. Tambahannya, selain menambah data, kita juga dapat melakukan pembacaan file.
Untuk sistem operasi yang tidak dapat membedakan antara file biner dan file
teks ASCII biasa, misalkan di keluarga MS Windows, dibutuhkan sebuah parameter
lagi jika kita ingin mengakses file jenis biner, yaitu parameter "b".
Parameter ini tidak berguna jika kita gunakan pada sistem operasi berbasis Unix
atau Linux karena secara otomatis sistem filenya telah membedakan file biner
dengan file teks ASCII.
Setelah membuka file dengan mode yang tepat, untuk melakukan penulisan ke file
dapat kita gunakan fungsi fputs(). Jika kita selesai bekerja dengan
file, maka kita harus menutup file tersebut dengan perintah fclose().
Contoh skrip PHP berikut ini akan menunjukkan caranya.
<?php // tentukan nama file $nama_file = "cobafile.txt"; // buka file $kodefile = fopen($nama_file,"a"); // tentukan data string $data = "Ini adalah transmisi sub space dari United Federation of Planets. Prioritas transmisi ini adalah pribadi dan rahasia. Jika benar demikian, apakah mungkin Anda menangkap transmisi ini... ha... ha... ha...!"; // tuliskan data ke file fputs($kodefile, $data); // tutup file fclose($kodefile); ?>
Pada skrip PHP di atas, kita menentukan terlebih dahulu nama file yang akan
dibuka. Fungsi fopen() yang kita gunakan akan membuka file tersebut
dengan mode append write only dan menghasilkan sebuah pointer file
yang kita simpan pada variabel $kodefile. Jadi setiap yang kita gunakan
variabel $kodefile, maksudnya adalah file (dalam contoh di atas
cobafile.txt), yang dibuka untuk proses append write only.
Posisi pointer file akan diletakkan pada akhir dari file tersebut, untuk
memastikan penambahan data tidak merusak data sebelumnya. Jika file yang
dimaksud tidak ditemukan, maka PHP otomatis membuat file baru dengan nama
cobafile.txt.
String data ditentukan setelah itu, kemudian dilakukan penulisan ke file dengan
fungsi fputs(). Untuk memastikan penulisan dilakukan ke file yang
benar, maka harus diyakinkan bahwa pointer file yang digunakan sebagai
parameter dari fungsi fputs() adalah $kodefile. Parameter yang
lain dari fungsi ini adalah string data yang akan ditulis, yang disimpan pada
variabel $data. Terakhir, tentu saja, kita harus selalu membiasakan
kerja rapi, jika kita membuka sesuatu, maka akhiri dengan menutup setelah semua
aktivitas kita selesai. Membiarkan sesuatu tetap terbuka dapat mempermalukan
kita, terutama jika berkaitan dengan hal-hal vital. Fungsi fclose()
kita gunakan untuk menutup file yang telah kita buka sebelumnya. Parameter
fungsi ini adalah pointer file, untuk memastikan kita telah menutup file
yang benar.
Sekarang kita akan membuat sebuah contoh buku tamu yang bersahaja dengan ilmu
yang telah kita dapatkan selama ini.
<html> <head> <title>Buku Tamu Sederhana</title> <basefont face="Arial"> </head> <body> <?php // tentukan nama file $nama_file = "bukutamu.txt"; // cek apakah ada form yang dikirim if ($simpan) { // buka file $kodefile = fopen($nama_file,"a"); // simpan isi form fputs($kodefile, date("r",time())."<br>"); if (trim($nama)=="") { $nama = "Mr. X"; } fputs($kodefile, "Nama : <b>$nama</b><br>"); if (trim($e-mail)=="") { $email = "(tidak ada)"; } fputs($kodefile, "e-mail : <b>$email</b><br>"); if (trim($komentar)=="") { $komentar = "(tidak ada)"; } fputs($kodefile, "Komentar : <b>$komentar</b><br>"); fputs($kodefile, ".<br>"); // tutup file fclose($kodefile); } ?> <font size=5>Mohon Isi Buku Tamu Ini</font> <form action="<?php echo $PHP_SELF; ?>" method="POST"> <table border=0 cellpadding=2 cellspacing=2> <tr> <td valign="top">Nama</td> <td> <input type="text" name="nama" size=50 maxlength=50> </td> </tr> <tr> <td>e-mail</td> <td valign="top"> <input type="text" name="email" size=50 maxlength=50> </td> </tr> <tr> <td valign="top">Komentar</td> <td> <textarea name="komentar" rows="4" cols="50"></textarea> </td> </tr> <tr> <td colspan=2 align="center"> <input type="submit" name="simpan" value="Simpan"> </td> </tr> </table> </form> <br> <hr> <br> <?php // tampilkan isi file jika ada if (file_exists($nama_file)) { echo "<b>Daftar Buku Tamu Yang Ada</b><p>"; readfile($nama_file); } else { echo "File buku alamat belum ada!"; } ?> </body> </html>
Nah, sebuah buku tamu yang sederhana namun fungsional telah berhasil kita buat
dengan PHP tanpa basis data. Anda mungkin menemukan fungsi baru yaitu
date() dan time(), yang berhubungan dengan waktu saat proses
dilakukan. Fungsi time() (tanpa parameter) akan memberikan waktu saat
fungsi ini dijalankan dihitung dari jumlah detik semenjak Epoch Unix atau
tanggal 1 Januari 1970 jam 00:00:00 GMT. Untuk dapat menampilkan informasi
waktu ini dengan benar, maka dibutuhkan fungsi date() yang memiliki
dua parameter/argumen. Argumen pertama adalah format waktu, dan argumen lainnya
adalah informasi waktu, dalam hal ini adalah hasil dari fungsi time().
Format waktu "r" menghasilkan bentuk standar RFC 822, contohnya
"Thu, 25 Dec 2001 17:05:07 +0700". Format-format lain mengenai tanggal
dan waktu ini akan kita bicarakan pada artikel yang terpisah.
Saat skrip PHP di atas dijalankan untuk pertama kalinya, akan muncul form isian
buku alamat, dan pesan bahwa file buku alamat belum ada. Jika form diisi dan
dikirim dengan tombol simpan, maka skrip secara otomatis memanggil dirinya
sendiri dan menambahkan data isian form ke file teks. Jika file tidak ditemukan,
maka akan dibuat file baru. Setelah melakukan penambahan data teks, maka form
kembali ditampilkan, dan isi file teks buku alamat ditampilkan setelah form.
Demikian seterusnya. Ternyata semudah itu, ya!?
Jelangkung, Jelangkung, Di Sini Ada Pesta Kecil!
Bagian paling akhir dari artikel ini akan membahas teknik dasar membuat fungsi
dalam skrip PHP. Mengapa kita perlu fungsi? Jawabannya adalah karena sifat
pemalas kita membuat adanya keengganan kita menulis kode yang sama
berulang-ulang. Hidup akan lebih nyaman karena waktu penulisan kode jadi lebih
lebih singkat, dan tentu saja, makin sedikit kode, jumlah kesalahan yang akan
muncul juga relatif berkurang. Kening kita tidak akan terlalu banyak berkerut
meneliti baris per baris kode yang salah.
Penulisan skrip dalam bentuk fungsi-fungsi terpisah akan membuat program kita
lebih bersifat modular. Dengan model seperti ini, pengembangan lebih lanjut
skrip kita menjadi lebih cepat dan mudah.
Sebagaian besar perintah dalam skrip PHP adalah merupakan fungsi. Fungsi-fungsi
yang kita gunakan selama ini, misalnya fungsi echo(), fungsi basis
data, merupakan fungsi yang telah terdefinisi sejak awal dalam PHP. Kita tinggal
menggunakannya sesuai dengan tujuan fungsi.
Sebagai makhluk yang tidak pernah puas, kadang-kadang kita ingin membuat
fungsi-fungsi sendiri, yang menggabungkan fungsi-fungsi yang ada menjadi sesuai
dengan keinginan di hati kita yang terdalam. Kedengarannya puitis sekali.
PHP menyediakan fasilitas pembuatan fungsi sendiri, sehingga hasrat Anda untuk
hidup lebih nyaman akan terpenuhi. Sulitkah? Kalau sulit, berarti Anda sedang
tidak mempelajari PHP...
Bentuk dasar pendeklarasian atau pendefinisian fungsi adalah sebagai berikut:
<?php function jelangkung() { [perintah 1]; [perintah 2]; [perintah 3]; .... dan seterusnya ... } ??gt;
Setelah mendefinisikan sebuah fungsi, maka kita dapat dengan mudah memanggilnya
melalui skrip. Lihatlah contoh berikut ini.
<?php function jelangkung() { [perintah 1]; [perintah 2]; [perintah 3]; .... dan seterusnya ... } jelangkung(); ??gt;
Pada saat parser PHP menemukan perintah pemanggilan fungsi, maka kontrol
eksekusi program akan beralih pada lokasi dimana fungsi tersebut didefinisikan.
Setelah seluruh perintah dalam blok fungsi itu dijalankan, maka kontrol
eksekusi program kembali ke lokasi tempat pemanggilan fungsi tersebut.
Menjadi Calon Kadet Starfleet
Hm... main jelangkung ternyata tidak menarik. Kembali kita ke Star Trek. Contoh
berikut ini akan menjelaskan mengenai implementasi fungsi sederhana. Berikut ini
adalah pertanyaan dan jawaban soal benar/salah untuk seleksi calon kadet
Starfleet, kekuatan militer United Federation of Planets.
<html> <head> <title>Latihan Soal Jawab Calon Kadet Starfleet</title> <basefont face="Arial"> </head> <body> <?php // definisikan fungsi-fungsi function jawaban_benar() { echo "Benar!"; } function jawaban_salah() { echo "Salah!"; } ?> <p> Ras yang pertama kali berjumpa dengan ras bumi adalah ras Vulcan.<br> Jawaban : <?php jawaban_benar() ?> <p> Kode pesawat USS Enterprise pada Star Trek: The Original Series adalah NCC-1701-C.<br> Jawaban : <?php jawaban_salah() ?> <p> Kapal Angkasa ras Romulan (War Bird) dapat hilang dari pandangan.<br> Jawaban : <?php jawaban_benar() ?> <p> Teknologi Transporter dan Replikator memiliki prinsip kerja yang sama.<br> Jawaban : <?php jawaban_benar() ?> <p> Teknologi Warp yang digunakan ras Borg menggunakan Transwarp Conduit.<br> Jawaban : <?php jawaban_benar() ?> </body> </html>
Berikut ini adalah hasil skrip PHP bila dijalankan.
Jawaban : Benar!
Kode pesawat USS Enterprise pada Star Trek: The Original Series adalah NCC-1701-C.
Jawaban : Salah!
Kapal Angkasa ras Romulan (War Bird) dapat hilang dari pandangan.
Jawaban : Benar!
Teknologi Transporter dan Replikator memiliki prinsip kerja yang sama.
Jawaban : Benar!
Teknologi Warp yang digunakan ras Borg menggunakan Transwarp Conduit.
Jawaban : Benar!
Kita dapat memanggil sebuah fungsi sebelum didefinisikan, asal masih dalam satu
skrip. Ubahlah skrip sebelumnya menjadi seperti di bawah ini. Hasil keluarannya
ditanggung tidak berbeda.
<html> <head> <title>Latihan Soal Jawab Calon Kadet Starfleet</title> <basefont face="Arial"> </head> <body> <p> Ras yang pertama kali berjumpa dengan ras bumi adalah ras Vulcan.<br> Jawaban : <?php jawaban_benar() ?> <p> Kode pesawat USS Enterprise pada Star Trek: The Original Series adalah NCC-1701-C.<br> Jawaban : <?php jawaban_salah() ?> <p> Kapal Angkasa ras Romulan (War Bird) dapat hilang dari pandangan.<br> Jawaban : <?php jawaban_benar() ?> <p> Teknologi Transporter dan Replikator memiliki prinsip kerja yang sama.<br> Jawaban : <?php jawaban_benar() ?> <p> Teknologi Warp yang digunakan ras Borg menggunakan Transwarp Conduit.<br> Jawaban : <?php jawaban_benar() ?> <?php // definisikan fungsi-fungsi function jawaban_benar() { echo "Benar!"; } function jawaban_salah() { echo "Salah!"; } ?> </body> </html>
Apa Yang Kuberikan, Apa Yang Kudapat
Fungsi-fungsi dapat pula kita berikan argumen untuk diolah di dalam fungsi, dan
dapat pula kita buat agar memberikan sebuah hasil untuk diolah di luar fungsi.
Contoh berikut adalah hasil modifikasi fungsi pada skrip terdahulu, sehingga
fungsi-fungsi tersebut dapat memberikan sebuah hasil untuk diolah di luar
fungsi.
<html> <head> <title>Latihan Soal Jawab Calon Kadet Starfleet</title> <basefont face="Arial"> </head> <body> <?php // definisikan fungsi-fungsi function jawaban_benar() { $jawaban = "Benar!"; return $jawaban; } function jawaban_salah() { $jawaban = "Salah!"; return $jawaban; } ?> <p> Ras yang pertama kali berjumpa dengan ras bumi adalah ras Vulcan.<br> Jawaban : <?php $hasil = jawaban_benar(); echo $hasil; ?> <p> Kode pesawat USS Enterprise pada Star Trek: The Original Series adalah NCC-1701-C.<br> Jawaban : <?php $hasil = jawaban_salah(); echo $hasil; ?> <p> Kapal Angkasa ras Romulan (War Bird) dapat hilang dari pandangan.<br> Jawaban : <?php $hasil = jawaban_benar(); echo $hasil; ?> <p> Teknologi Transporter dan Replikator memiliki prinsip kerja yang sama.<br> Jawaban : <?php $hasil = jawaban_benar(); echo $hasil; ?> <p> Teknologi Warp yang digunakan ras Borg menggunakan Transwarp Conduit.<br> Jawaban : <?php $hasil = jawaban_benar(); echo $hasil; ?> </body> </html>
Terlihat perbedaan cara penanganan hasil fungsi. Pada skrip sebelumnya fungsi
tidak memberikan hasil/nilai yang dapat diolah, tetapi langsung menampilkan
sesuatu pada media keluaran standar (melalui perintah echo()). Karena
fungsi yang telah dimodifikasi tidak dapat langsung menampilkan hasil fungsi
tetapi memberikan hasil/nilai, maka sebuah variabel (dalam skrip di atas
adalah $hasil) ditugaskan untuk menampung nilai yang dihasilkan oleh
fungsi, sebelum ditampilkan dengan perintah echo().
Contoh berikut ini memberikan gambaran mengenai argumen/parameter fungsi.
<html> <head> <title>Persamaan Luas Segitiga</title> <basefont face="Arial"> </head> <body> <?php // definisikan fungsi-fungsi function luas_segitiga($alas, $tinggi) { $jawaban = 0.5 * $alas * $tinggi; return $jawaban; } $alas_segitiga = 6; $tinggi_segitiga = 9; ?> <p> Luas Segitiga dengan<br> - Alas : <?php echo $alas_segitiga; ?><br> - Tinggi : <?php echo $tinggi_segitiga; ?><br> Adalah = <?php $hasil = luas_segitiga($alas_segitiga, $tinggi_segitiga); echo $hasil; ?> <br> </body> </html>
Fungsi luas_segitiga() yang kita buat, membutuhkan dua argumen, yaitu
argumen panjang alas ($alas) dan argumen tinggi segitiga
($tinggi). Nilai kedua argumen ini diberikan pada saat pemanggilan
fungsi yang disimpan dalam bentuk variabel PHP selama fungsi tersebut dieksekusi
agar dapat digunakan pada proses eksekusi perintah-perintah PHP di dalam blok
fungsi. Fungsi ini akan menghasilkan nilai luas segitiga yang diperoleh dari
operasi matematis terhadap kedua argumen tersebut.
Setiap saat di dalam skrip PHP, kita dapat memanggil/menggunakan secara
berulang-ulang fungsi-fungsi yang kita definisikan, baik yang didefinisikan
dalam skrip tersebut maupun pada skrip lain yang telah diikutsertakan dengan
perintah include() atau require(). Betapa sebuah berita yang
baik bagi kita, karena kita tidak perlu menghabiskan waktu lagi untuk menulis
beberapa bagian kode secara berulang-ulang. Anda pun bisa memiliki lebih banyak
waktu untuk menonton acara TV kegemaran Anda.
Masalah Pribadi dan Masalah Umum
Kini kita akan melihat bagaimana sebuah variabel dapat dipakai oleh fungsi.
Aturan dasarnya adalah:
- Setiap variabel dalam sebuah fungsi adalah variabel lokal yang hanya berlaku di dalam fungsi itu sendiri. Variabel ini hanya bertahan dalam memori saat fungsi dieksekusi dan hilang dari memori saat fungsi selesai dieksekusi. Variabel lokal ini tidak dapat diakses dari luar fungsi.
- Fungsi pada dasarnya tidak dapat mengakses variabel yang berada di luar fungsi tersebut.
- Operasi terhadap argumen di dalam fungsi, tidak akan berpengaruh apa-apa terhadap variabel di luar fungsi yang digunakan sebagai argumen, bahasa dewanya, setiap argumen bersifat passed by value.
Mari kita lihat contoh skrip berikut ini.
<?php // berikan nilai ke sebuah variabel di luar fungsi $jenis_kecepatan = "impuls"; // fungsi yang akan mengubah nilai variabel function ubah_kecepatan($nama) { $jenis_kecepatan = $nama; return $jenis_kecepatan; } // tampilkan nilai variabel sebelum pemanggilan fungsi echo "Sebelum pemanggilan fungsi, jenis kecepatan adalah $jenis_kecepatan.<p>"; // panggil fungsi ubah_kecepatan("warp"); echo "Setelah pemanggilan fungsi, jenis kecepatan adalah $jenis_kecepatan."; ?>
Jalankan skrip PHP di atas, dan Anda akan dapatkan hasil sebagai berikut.
Perubahan nilai variabel $jenis_kecepatan di dalam fungsi tidak
berpengaruh terhadap nilai variabel $jenis_kecepatan yang di luar
fungsi, karena kedua variabel ini berbeda konteksnya. Variabel
$jenis_kecepatan yang ada di dalam fungsi adalah variabel lokal fungsi
dan tidak ada kaitannya dengan variabel $jenis_kecepatan yang berada
di luar fungsi. Itu sebabnya nilai variabel $jenis_kecepatan di luar
fungsi tetap tidak berubah setelah pemanggilan fungsi.
Bagaimana jika Anda ingin sekali mengubah nilai variabel di luar fungsi tapi
dari dalam fungsi? Ada dua pilihan. Pilihan pertama, Anda putus asa dan tidak
mau menggunakan PHP lagi, atau Anda dapat gunakan fungsi/perintah
global.
Fungsi/perintah global akan membuat pengecualian dari aturan di atas,
dan langsung membuat variabel yang ada pada fungsi mereferensikan variabel
dengan nama sama yang ada di luar fungsi. Tidak usah bingung atas bahasa
berbelit ini, langsung saja perhatikan modifikasi skrip sebelumnya.
<?php // berikan nilai ke sebuah variabel di luar fungsi $jenis_kecepatan = "impuls"; // fungsi yang akan mengubah nilai variabel function ubah_kecepatan($nama) { global $jenis_kecepatan; $jenis_kecepatan = $nama; return $jenis_kecepatan; } // tampilkan nilai variabel sebelum pemanggilan fungsi echo "Sebelum pemanggilan fungsi, jenis kecepatan adalah $jenis_kecepatan.<p>"; // panggil fungsi ubah_kecepatan("warp"); echo "Setelah pemanggilan fungsi, jenis kecepatan adalah $jenis_kecepatan."; ?>
Kini coba Anda jalankan skrip ini lagi, niscaya Anda akan mendapatkan hasil
seperti di bawah ini.
Kebebasan Yang Berarti
Sejauh ini, fungsi-fungsi yang Anda buat selalu tertentu jumlah argumennya.
Bisa tidak ada sama sekali, atau dalam jumlah yang pasti. Bagaimana jika kita
tidak dapat memastikan jumlah argumen yang kita masukkan ke sebuah fungsi?
Kadang satu, dua atau sekali waktu sepuluh argumen. Bisakah PHP menangani hal
ini?
Karena topik ini masuk dalam artikel, jelas jawabannya pasti "bisa". Baiklah,
sekarang kita lihat caranya.
PHP 4, menyediakan fungsi-fungsi yang dapat kita gunakan untuk maksud ini, yaitu
fungsi func_num_args() yang akan menghasilkan jumlah argumen yang
diberikan pada sebuah fungsi, dan fungsi func_get_args() yang akan
menyimpan semua argumen fungsi yang diberikan ke dalam bentuk variabel
array. Kita dapat melihat implementasinya pada skrip berikut ini.
<html> <head> <title>Fungsi Dengan Jumlah Argumen Bebas</title> </head> <body> <?php function awak_enterprise() { $argumen = func_get_args(); return $argumen; } $nama_awak = awak_enterprise("Piccard", "Riker", "LaForge", "Worf"); ?> Berikut ini adalah nama-nama awak kapal USS Enterprise: <ul> <?php for ($i=0; $i < sizeof($nama_awak); $i++) { echo "<li>" . $nama_awak[$i] . "\n"; } ?> </ul> </body> </html>
Hasil dari skrip di atas adalah:
- Piccard
- Riker
- LaForge
- Worf
Beginilah Akhirnya...
Selesai sudah perjalanan panjang kita dalam mempelajari dasar-dasar yang paling
mendasar bagi pemula PHP. Dengan bekal lima bagian artikel ini, sesungguhnya
Anda telah cukup siap untuk memulai sendiri membangun aplikasi atau situs
dinamis dengan PHP. Tentunya, Anda harus banyak berlatih sendiri dan membaca
artikel-artikel lain baik tingkat pemula, menengah maupun lanjutan/terapan.
Kini Anda sadar, bahwa ternyata menggemari Star Trek dapat membantu Anda,
paling tidak akan melatih Anda untuk berani mengunjungi tempat yang belum
pernah dikunjungi oleh siapa pun.
Tetaplah belajar PHP, dan jangan bosan menantikan topik lain dari belajar PHP.
Sampai di sini dulu .... Merdeka!*)
Tidak ada komentar:
Posting Komentar