Jumat, 16 Maret 2012

Belajar PHP dan MySQL 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:
<?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:
 
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);
 
?>
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:
<?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:
<?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:
<?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:
<?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.
<?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:
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:
Hello, I am The Faraway Tree from Moonface
Dan lihat apa yang terjadi jika Anda lupa untuk melewati sebuah argumen yang dibutuhkan:
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:
<?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:
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:
<?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:
<?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";
 
?>
Ketika Anda menjalankan script ini, di sini adalah apa yang Anda akan melihat:
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):
<?php
 
// define a function
function getDay() {
    // define a variable inside the function
    $today = "Saturday";
}
 
getDay();
print "Today is $today";
 
?>
Berikut adalah output:
Today is
Tergantung pada error_reporting Anda telah mengatur di php.ini, Anda juga mungkin akan melihat pesan kesalahan:
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:
<?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:
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:
<?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:
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:
<?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:
.
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.

Tidak ada komentar:

Posting Komentar