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:<?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(); ?>
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:
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:
<?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); ?>
Ada juga kemungkinan untuk lulus lebih dari satu argumen untuk fungsi. Hal ini dilakukan dengan menggunakan daftar dipisahkan koma, seperti yang ditunjukkan contoh berikut:
<?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"); ?>
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:<?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); ?>
Anda bahkan dapat menggunakan hasil dari fungsi di dalam fungsi lain, seperti digambarkan dalam revisi kecil dari contoh di atas:
<?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)); ?>
<?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, "; } ?>
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.<?php // define a function function introduce($name, $place) { print "Hello, I am $name from $place"; } // call function introduce("Moonface", "The Faraway Tree"); ?>
Hello, I am Moonface from The Faraway Tree
Hello, I am The Faraway Tree from Moonface
Warning: Missing argument 2 for introduce() in xx.php on line 3 Hello, I am Moonface from
<?php // define a function function introduce($name="John Doe", $place="London") { print "Hello, I am $name from $place"; } // call function introduce("Moonface"); ?>
Hello, I am Moonface from London
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:<?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"); ?>
<?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:
<?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"; ?>
It is Saturday inside the function It is Tuesday outside the function
Sebaliknya juga benar: variabel didefinisikan dalam suatu fungsi tidak bisa “melihat” luar. Untuk mengilustrasikan, lihatlah contoh berikut ini dan outputnya (atau kurangnya itu):
<?php // define a function function getDay() { // define a variable inside the function $today = "Saturday"; } getDay(); print "Today is $today"; ?>
Today is
Notice: Undefined variable: today in x1.php on line 10
Berikut ini adalah menulis ulang dari contoh sebelumnya, kali ini mendeklarasikan variabel hari $global:
<?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"; ?>
It is Tuesday before running the function It is Saturday inside the function It is Saturday after running the function
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:
<?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"; ?>
It is Tuesday inside the function It is Saturday outside the function
Sekarang, melihat bagaimana “lewat referensi” bekerja:
<?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"; ?>
. It is Tuesday inside the function It is Tuesday outside the function
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.