Belajar PHP dan MySQL dari NOL – Part VII (Fungsi)
Fungsi dalam PHP
Fungsi adalah menjadi “suatu blok statemen yang dapat dikelompokkan bersama sebagai sebuah entitas bernama.” Karena ini adalah tutorial tentang PHP, bukan kursus pengantar dalam bahasa Yunani, saya akan menerjemahkan bahwa untuk Anda: fungsi hanyalah satu set pernyataan program yang melakukan tugas tertentu, dan yang bisa “disebut”, atau dieksekusi, dari mana saja dalam program anda.
Setiap bahasa pemrograman datang dengan memiliki fungsi built-in, dan biasanya juga memungkinkan pengembang untuk menentukan fungsi mereka sendiri. Sebagai contoh, jika saya punya laporan laba untuk tahun di meja saya, dan saya ingin mengembang setiap angka sebesar 35%, saya bisa menelepon lingkungan akuntansi saya dan meminta mereka untuk melakukannya untuk saya … atau saya bisa menulis fungsi PHP sederhana yang disebut cheatTheShareholders () dan memilikinya melakukan pekerjaan untuk saya (itu lebih cepat, ditambah dengan PHP tidak tagihan per jam).
Ada tiga alasan penting mengapa fungsi adalah Good Thing™.
Pertama: fungsi-fungsi yang ditetapkan memungkinkan Anda untuk memisahkan kode Anda ke subbagian mudah diidentifikasi – yang lebih mudah untuk memahami dan debug.
Kedua: fungsi membuat program anda modular, memungkinkan Anda untuk menulis sepotong kode sekali dan kemudian kembali menggunakannya beberapa kali dalam program yang sama.
Dan ketiga: pembaruan menyederhanakan fungsi kode atau perubahan, karena perubahan hanya perlu dilaksanakan dalam satu tempat (definisi fungsi). Fungsi sehingga menghemat waktu, uang dan elektron … dan saya tahu elektron setidaknya akan terima kasih!
Praktek penggunaan fungsi
Untuk melihat bagaimana fungsi bekerja, lihat contoh berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php // define a function function myStandardResponse() { echo "Get lost, jerk!<br /><br />"; } // on the bus echo "Hey lady, can you spare a dime? <br />"; myStandardResponse(); // at the office echo "Can you handle Joe's workload, in addition to your own, while he's in Tahiti for a month? You'll probably need to come in early and work till midnight, but we are confident you can handle it. Oh, and we can't pay you extra because of budgetary constraints...<br />"; myStandardResponse(); // at the party echo "Hi, haven't I seen you somewhere before?<br />"; myStandardResponse(); ?> |
Inilah output yang akan terlihat:
1 2 3 4 5 6 7 8 9 10 |
Hey lady, can you spare a dime? Get lost, jerk! Can you handle Joe's workload, in addition to your own, while he's in Tahiti for a month? You'll probably need to come in early and work till midnight, but we are confident you can handle it. Oh, and we can't pay you extra because of budgetary constraints... Get lost, jerk! Hi, haven't I seen you somewhere before? Get lost, jerk! |
(Tentu itu kasar, tapi itu tidak menunjukkan bagaimana fungsi memungkinkan Anda untuk menggunakan kembali potongan-potongan kode.)
Hal pertama yang saya lakukan dalam script di atas adalah mendefinisikan sebuah fungsi baru, dengan kata kunci fungsi. Kata kunci ini diikuti oleh nama fungsi, yang dalam hal ini adalah myStandardResponse (). Semua kode program yang melekat pada fungsi yang kemudian ditempatkan di dalam pasangan kurung kurawal – dan ini dapat berisi kode program loop, pernyataan bersyarat, panggilan ke fungsi-fungsi yang ditentukan lain, atau panggilan ke fungsi-fungsi PHP yang lain.
Tentu saja, mendefinisikan suatu fungsi hanya setengah dari teka-teki, untuk itu ada gunanya sama sekali, Anda perlu untuk “memohon” itu. Dalam PHP, seperti dalam satu juta bahasa lain, hal ini dilakukan dengan memanggil fungsi berdasarkan namanya, seperti yang telah saya lakukan dalam contoh di atas. Memanggil fungsi yang ditetapkan pengguna identik dengan memanggil built-in fungsi PHP seperti echo () atau meledak ().
Berikut format khas untuk fungsi:
1 2 3 4 5 6 7 8 |
function function_name (optional function arguments) { statement 1... statement 2... . . . statement n... } |
Memiliki Argumen sebuah … atau Dua
Fungsi seperti yang Anda lihat di bagian sebelumnya cetak nilai yang sama setiap kali Anda memanggil mereka. Sementara ini menarik enam pertama kali, bisa membosankan pada hari ketujuh. Apa yang perlu kita lakukan, untuk membuat, membosankan fungsi bodoh sedikit lebih menarik, adalah mendapatkan mereka untuk kembali nilai yang berbeda setiap kali mereka dipanggil.
Masukkan argumen.
Argumen bekerja dengan menggunakan pengganti untuk mewakili suatu variabel tertentu dalam suatu fungsi. Nilai untuk variabel ini diberikan ke fungsi tersebut pada saat run-time dari program utama. Karena masukan ke fungsi tersebut akan berbeda pada setiap permintaan, sehingga akan output.
Untuk melihat bagaimana ini bekerja, lihat fungsi berikut, yang menerima sebuah argumen tunggal dan kemudian mencetak kembali setelah perhitungan:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php // define a function function getCircumference($radius) { echo "Circumference of a circle with radius $radius is ".sprintf("%4.2f", (2 * $radius * pi()))."<br />"; } // call a function with an argument getCircumference(10); // call the same function with another argument getCircumference(20); ?> |
Dalam contoh ini, ketika getCircumference () fungsi ini disebut dengan argumen, argumen yang diberikan ke variabel placeholder $ radius dalam fungsi tersebut, kemudian ditindaklanjuti oleh kode dalam definisi fungsi.
Ada juga kemungkinan untuk lulus lebih dari satu argumen untuk fungsi. Hal ini dilakukan dengan menggunakan daftar dipisahkan koma, seperti yang ditunjukkan contoh berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php // define a function function changeCase($str, $flag) { /* check the flag variable and branch the code */ switch($flag) { case 'U': print strtoupper($str)."<br />"; break; case 'L': print strtolower($str)."<br />"; break; default: print $str."<br />"; break; } } // call the function changeCase("The cow jumped over the moon", "U"); changeCase("Hello Sam", "L"); ?> |
Di sini, tergantung pada nilai argumen kedua, program aliran dalam fungsi bergerak ke cabang sesuai dan memanipulasi argumen pertama.
Perhatikan bahwa tidak ada persyaratan untuk menentukan tipe data dari argumen yang dilewatkan ke fungsi. Karena PHP adalah bahasa dinamis-mengetik, secara otomatis mengidentifikasi jenis variabel dan bertindak atas secara wajar.
Lingkaran di Pasir
Fungsi pada halaman sebelumnya hanya dicetak output mereka ke layar. Tetapi bagaimana jika Anda ingin fungsi untuk melakukan sesuatu yang lain dengan hasilnya? Nah, dalam PHP, Anda dapat memiliki fungsi mengembalikan nilai, seperti hasil perhitungan, untuk pernyataan yang memanggilnya. Hal ini dilakukan dengan menggunakan pernyataan return dalam fungsi, seperti ditunjukkan di bawah ini:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php // define a function function getCircumference($radius) { // return value return (2 * $radius * pi()); } /* call a function with an argument and store the result in a variable */ $result = getCircumference(10); /* call the same function with another argument and print the return value */ print getCircumference(20); ?> |
Di sini, argumen dikirimkan ke getCircumference () fungsi diproses, dan hasilnya dikembalikan ke program utama, di mana ia dapat ditangkap dalam variabel, dicetak, atau ditangani dengan cara lain.
Anda bahkan dapat menggunakan hasil dari fungsi di dalam fungsi lain, seperti digambarkan dalam revisi kecil dari contoh di atas:
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php // define a function function getCircumference($radius) { // return value return (2 * $radius * pi()); } // print the return value after formatting it print "The answer is ".sprintf("%4.2f", getCircumference(20)); ?> |
Nilai Kembali tidak perlu angka atau string saja: fungsi hanya dapat dengan mudah mengembalikan array (ingat mereka?), seperti yang ditunjukkan dalam contoh berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php /* define a function that can accept a list of email addresses */ function getUniqueDomains($list) { /* iterate over the list, split addresses and add domain part to another array */ $domains = array(); foreach ($list as $l) { $arr = explode("@", $l); $domains[] = trim($arr[1]); } // remove duplicates and return return array_unique($domains); } // read email addresses from a file into an array $fileContents = file("data.txt"); /* pass the file contents to the function and retrieve the result array */ $returnArray = getUniqueDomains($fileContents); // process the return array foreach ($returnArray as $d) { print "$d, "; } ?> |
Dengan asumsi file tersebut tampak seperti ini,
test@test.com
a@x.com
zooman@deeply.bored.org
b@x.com
guess.me @ where.ami.net
testmore@test.com
output dari script di atas akan terlihat seperti ini:
test.com, x.com, deeply.bored.org, where.ami.net,
Perhatikan bahwa pernyataan return berakhir pelaksanaan program di dalam suatu fungsi.
Susunan letak argumen
Urutan argumen dilewatkan ke suatu fungsi dapat menjadi penting. Contoh berikut ini mengharuskan bahwa nama dilewatkan sebagai argumen pertama, dan tempat sebagai yang kedua.
1 2 3 4 5 6 7 8 9 10 11 |
<?php // define a function function introduce($name, $place) { print "Hello, I am $name from $place"; } // call function introduce("Moonface", "The Faraway Tree"); ?> |
Ini adalah output:
1 |
Hello, I am Moonface from The Faraway Tree |
Dalam contoh ini, jika Anda membalik urutan argumen yang dilewatkan ke fungsi, ini adalah apa yang Anda akan melihat:
1 |
Hello, I am The Faraway Tree from Moonface |
Dan lihat apa yang terjadi jika Anda lupa untuk melewati sebuah argumen yang dibutuhkan:
1 2 |
Warning: Missing argument 2 for introduce() in xx.php on line 3 Hello, I am Moonface from |
Untuk menghindari kesalahan seperti itu, PHP memungkinkan Anda untuk menentukan nilai default untuk semua argumen dalam fungsi yang ditetapkan pengguna. Nilai-nilai default digunakan jika pemanggilan fungsi yang hilang beberapa argumen. Berikut ini contohnya:
1 2 3 4 5 6 7 8 9 10 11 |
<?php // define a function function introduce($name="John Doe", $place="London") { print "Hello, I am $name from $place"; } // call function introduce("Moonface"); ?> |
Dalam hal ini output akan:
1 |
Hello, I am Moonface from London |
Perhatikan bahwa fungsi telah disebut dengan hanya satu argumen, meskipun definisi fungsi membutuhkan dua. Namun, karena nilai-nilai default yang hadir untuk setiap argumen dalam fungsi tersebut, argumen yang hilang diganti dengan nilai default untuk argumen itu, dan tidak ada kesalahan yang dihasilkan.
Daftar Argumen Amazing Menyusut
Semua contoh di halaman sebelumnya memiliki satu kesamaan: jumlah argumen pada definisi fungsi adalah tetap. Namun, PHP 4.x juga mendukung daftar variabel-panjang argumen, dengan menggunakan func_num_args () dan func_get_args () perintah. Karena ingin nama yang lebih baik, fungsi-fungsi ini disebut “fungsi fungsi”. Coba membungkus lidah Anda di sekitar bahwa ketika Anda melihat contoh berikut ini, yang menunjukkan bagaimana mereka dapat digunakan:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php // define a function function someFunc() { // get the arguments $args = func_get_args(); // print the arguments print "You sent me the following arguments:"; foreach ($args as $arg) { print " $arg "; } print "<br />"; } // call a function with different arguments someFunc("red", "green", "blue"); someFunc(1, "soap"); ?> |
Hmmm … jika Anda licik, Anda mungkin telah mencoba untuk melewati someFunc () array, dan menemukan bahwa alih-alih menampilkan elemen array, itu hanya berkata “Array”. Anda dapat memperbaikinya dengan menambahkan tes cepat untuk argumen array dalam fungsi, seperti dalam hal ini menulis ulang:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<?php // define a function function someFunc() { // get the number of arguments passed $numArgs = func_num_args(); // get the arguments $args = func_get_args(); // print the arguments print "You sent me the following arguments: "; for ($x = 0; $x < $numArgs; $x++) { print "<br />Argument $x: "; /* check if an array was passed and, if so, iterate and print contents */ if (is_array($args[$x])) { print " ARRAY "; foreach ($args[$x] as $index => $element) { print " $index => $element "; } } else { print " $args[$x] "; } } } // call a function with different arguments someFunc("red", "green", "blue", array(4,5), "yellow"); ?> |
Going Global
Sekarang mari kita berbicara sedikit tentang variabel yang digunakan dalam fungsi, dan hubungan mereka dengan variabel di dunia luar. Biasanya, variabel yang digunakan dalam suatu fungsi yang “lokal” – yang berarti bahwa nilai-nilai yang ditugaskan kepada mereka, dan perubahan yang dilakukan kepada mereka, dibatasi untuk fungsi ruang saja.
Pertimbangkan contoh sederhana ini:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php // define a variable in the main program $today = "Tuesday"; // define a function function getDay() { // define a variable inside the function $today = "Saturday"; // print the variable print "It is $today inside the function<br />"; } // call the function getDay(); // print the variable print "It is $today outside the function"; ?> |
Ketika Anda menjalankan script ini, di sini adalah apa yang Anda akan melihat:
1 2 |
It is Saturday inside the function It is Tuesday outside the function |
Dengan kata lain, variabel di dalam fungsi ini terisolasi dari variabel identik-nama dalam program utama. Variabel dalam fungsi demikian tepat disebut “lokal” variabel karena mereka hanya ada dalam fungsi di mana mereka didefinisikan.
Sebaliknya juga benar: variabel didefinisikan dalam suatu fungsi tidak bisa “melihat” luar. Untuk mengilustrasikan, lihatlah contoh berikut ini dan outputnya (atau kurangnya itu):
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php // define a function function getDay() { // define a variable inside the function $today = "Saturday"; } getDay(); print "Today is $today"; ?> |
Berikut adalah output:
1 |
Today is |
Tergantung pada error_reporting Anda telah mengatur di php.ini, Anda juga mungkin akan melihat pesan kesalahan:
1 |
Notice: Undefined variable: today in x1.php on line 10 |
Namun, saya tidak mengatakan ini tidak bisa diatasi. Untuk memiliki variabel dalam fungsi dapat diakses dari luar (dan sebaliknya), semua yang perlu Anda lakukan adalah pertama menyatakan mereka “global” dengan – coba tebak! – global kata kunci.
Berikut ini adalah menulis ulang dari contoh sebelumnya, kali ini mendeklarasikan variabel hari $global:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<?php // define a variable in the main program $today = "Tuesday"; // define a function function getDay() { // make the variable global global $today; // define a variable inside the function $today = "Saturday"; // print the variable print "It is $today inside the function<br />"; } // print the variable print "It is $today before running the function<br />"; // call the function getDay(); // print the variable print "It is $today after running the function"; ?> |
Dan ini adalah output nya:
1 2 3 |
It is Tuesday before running the function It is Saturday inside the function It is Saturday after running the function |
Jadi, sekali variabel dideklarasikan global, tersedia di tingkat global, dan dapat dimanipulasi baik di dalam dan luar fungsi.
PHP juga dilengkapi dengan variabel superglobal disebut – variabel yang selalu tersedia, terlepas dari apakah Anda sedang berada dalam suatu fungsi atau luar. Kau sudah melihat beberapa variabel khusus dalam aksi: tersebut _SERVER $, $ _POST dan $ _GET variabel semua superglobals, itulah sebabnya anda dapat mengakses hal-hal seperti nama-mengeksekusi script saat ini atau bahkan di dalam bentuk nilai fungsi.
Superglobals adalah Good Thing ™, karena mereka selalu ada ketika Anda membutuhkan mereka, dan Anda tidak perlu melompat melalui drum atau apapun untuk menggunakan data yang tersimpan di dalamnya. Baca lebih lanjut tentang superglobals dan lingkup variabel di http://www.php.net/manual/en/language.variables.predefined.php dan http://www.php.net/manual/en/language.variables.scope. php.
Memeriksa Referensi
Setiap diskusi tentang variabel dalam dan keluar dari fungsi tidak akan lengkap tanpa menyebutkan perbedaan antara “lewat referensi” dan “lewat nilai”. Sejauh ini, semua contoh Anda pernah melihat telah terlibat lewat argumen untuk fungsi “dengan nilai” – yang berarti bahwa salinan variabel dilewatkan ke fungsi, sedangkan variabel asli tetap tidak tersentuh. Namun, PHP juga memungkinkan Anda untuk melewatkan “dengan referensi” – yang berarti bahwa alih-alih lulus nilai ke fungsi, Anda lulus referensi ke variabel asli, dan memiliki fungsi pada tindakan yang bukan salinan.
Membingungkan? Nah, ini mungkin lebih mudah untuk memahami dengan sebuah contoh. Mari kita mulai dengan ini:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php // create a variable $today = "Saturday"; // function to print the value of the variable function setDay($day) { $day = "Tuesday"; print "It is $day inside the function<br />"; } // call function setDay($today); // print the value of the variable print "It is $today outside the function"; ?> |
Anda sudah melihat ini sebelumnya, dan Anda sudah tahu apa output yang akan dikatakan:
1 2 |
It is Tuesday inside the function It is Saturday outside the function |
Hal ini karena ketika getDay tersebut () fungsi dipanggil, ia melewati nilai “Sabtu” untuk fungsi (“lewat nilai”). Variabel yang asli tetap tak tersentuh, hanya isinya dikirim ke fungsi. Fungsi kemudian bekerja pada konten, memodifikasi dan menampilkan itu.
Sekarang, melihat bagaimana “lewat referensi” bekerja:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php // create a variable $today = "Saturday"; // function to print the value of the variable function setDay(&$day) { $day = "Tuesday"; print "It is $day inside the function<br />"; } // call function setDay($today); // print the value of the variable print "It is $today outside the function"; ?> |
Perhatikan ampersand (&) sebelum argumen dalam definisi fungsi. Ini memberitahu PHP untuk menggunakan referensi variabel bukan nilai variabel. Ketika seperti referensi dilewatkan ke fungsi, kode di dalam fungsi bekerja pada referensi, dan memodifikasi isi dari variabel asli (yang referensi menunjuk ke) bukan salinan. Jika kemudian kamu mencoba mengambil nilai dari variabel asli luar fungsi, ia mengembalikan nilai diubah:
1 2 3 |
. It is Tuesday inside the function It is Tuesday outside the function |
Sekarang Anda mengerti mengapa saya mengatakan tidak diskusi tentang variabel akan lengkap tanpa menyebutkan dua cara variabel yang lewat. Ini, tentu saja, adalah apa kata kunci global tidak di dalam fungsi: gunakan referensi untuk memastikan bahwa perubahan variabel di dalam fungsi tersebut juga mencerminkan luar. Manual PHP menempatkan dengan sangat baik ketika ia mengatakan “… ketika Anda mendeklarasikan sebuah variabel sebagai var $ global Anda sebenarnya menciptakan referensi ke variabel global”. Untuk contoh lebih lanjut, baca semua tentang referensi di http://www.zend.com/manual/language.references.php.
Dan itu hanya tentang menyimpulkan tutorial ini. Kali ini Anda telah mengambil langkah besar menuju desain software yang lebih baik dengan belajar bagaimana bagian abstrak dari kode PHP Anda ke dalam fungsi dapat digunakan kembali. Anda sekarang tahu bagaimana menambah fleksibilitas untuk fungsi Anda dengan memungkinkan mereka untuk menerima argumen yang berbeda, dan bagaimana untuk memperoleh satu (atau lebih) mengembalikan nilai dari mereka. Akhirnya, Anda telah belajar sedikit tentang bagaimana memperlakukan variabel PHP dalam dan luar fungsi.
Sumber: http://devzone.zend.com/node/view/id/637
Diterjemahkan oleh: http://translate.google.com dan disadur oleh jinbatsu (jwd)
Waduwww panjanggggg benerrrr gan!
OK, tapi mantapp penjelasannya.. bisa belajar lebih nih kedepannya untuk pake fungsi.
makasih ya.. lanjut terus gan..
wahh manfaat nih …. 🙂
aq pelajari yaa..praktekin nih
@belajar, iya gan.. mesti sabar kalau mau belajar hehe.
@Andre, halo ndre.. makasih ya atas dukungannya 🙂 kamu udah jago juga hehe 😀
Wah manfaat bnget gan.. Thank’s penjelasannya.. 😀
keren kang, paling gk nyangka ternyata ampersand (&) sebelum argumen bisa merubah isi variabel