Variabel dalam PHP ditandai dengan karakter dollar kemudian diikuti dengan nama variabelnya sendiri. Nama variabel membedakan antara huruf kecil dan besar (case-sensitive).
Nama variabel mengikutai aturan yang sama dengan label yang lain dalam PHP. Nama variabel yang diperbolehkan dimulai dengan huruf atau garis-bawah, kemudian diikuti dengan huruf, angka atau garis-bawah. Dalam regular expression, akan dituliskan sebagai : [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*
Catatan: Untuk keperluan kita di sini yang dimaksud dengan huruf adalah a-z, A-Z, dan karakter ASCII dari 127 hingga 255 (0x7f-0xff).
1 2 $var = "Bob"; 3 $Var = "Joe"; 4 echo "$var, $Var"; // menghasilkan "Bob, Joe" 5 6 $4site = not yet; // tidak boleh; dimulai dengan angka |
Dalam PHP, variabel selalu diisi dengan nilai. Dengan kata lain, ketika anda mengisikan sebuah ekspresi pada suatu variabel, semua nilai ekspresi asal akan disalin ke dalam variabel tujuan. Ini berarti setelah mengisikan nilai suatu variabel ke variabel yang lain, jika kita mengubah nilai salah satu variabel tidak akan mempengaruhi variabel yang lain. Untuk lebih jelas mengenai pengisian ini, lihat Ekspresi.
PHP4 memberikan cara lain untuk mengisikan nilai ke variabel: assign by reference. Artinya, variabel yang baru merujuk (dengan kata lain, "menjadi alias untuk" atau "menunjuk pada") variabel asal. Perubahan pada variabel yang baru akan mempengaruhi variabel asal, dan sebaliknya. Ini juga berarti tidak ada proses penyalinan; sehingga pengisian variabel bekerja lebih cepat. Akan tetapi perlu diingat peningkatan kecepatan hanya dapat diamati pada pengulangan yang banyak atau pada pengisian array atau objek yang besar.
Untuk mengisikan dengan rujukan, cukup menuliskan karakter ampersand (&)
di awal variabel yang akan diisikan (variabel asal). Sebagai contoh, akan mencetak
output 'Nama saya Bob' dua kali.
1 2 <?php 3 $foo = 'Bob'; // Mengisikan kata 'Bob' ke variabel $foo 4 $bar = &$foo; // Merujuk pada $foo melalui $bar. 5 $bar = "Nama saya $bar"; // Menimpa variabel $bar dengan nilai yang baru 6 echo $foo; // $foo akan ditimpa juga. 7 echo $bar; 8 ?> 9 |
Satu masalah penting yang harus diingat adalah, hanya nama variabel yang bisa diisikan dengan rujukan.
1 2 <?php 3 $foo = 25; 4 $bar = &$foo; // Pengisian yang diperbolehkan. 5 $bar = &(24 * 7); // Tidak boleh!; tidak merujuk pada nama variabel. 6 7 function test() { 8 return 25; 9 } 10 11 $bar = &test(); // Tidak benar; karena tes() adalah fungsi. 12 ?> 13 |
Tanpa melihat faktor-faktor tersebut, disini diberikan variabel terdefinisi yang bisa dipakai jika PHP3 berjalan sebagai module server Apache.
Untuk mendapatkan daftar variabel terdefinsi (dan informasi yang lain), silahkan lihat (dan gunakan) phpinfo().
Catatan: Daftar berikut hanyalah petunjuk sederhana mengenai variabel terdefinisi yang anda harapkan dapat anda pakai dalam skrip anda.
Sebagai catatan, beberapa dari variabel-variabel ini bisa dipakai (atau punya arti) jika PHP dijalankan dari perintah baris.
Variabel-variabel yang lain termasuk variabel yang diberikan oleh CGI, akan diberikan juga tidak peduli PHP dijalankan sebagai modul server atau pemroses CGI.
Ini adalah variabel yang dibuat oleh PHP sendiri.
1 2 $a = 1; 3 include "b.inc"; 4 |
Disini variabel $a dapat dipakai dalam skrip b.inc yang disisipkan. Dalam fungsi yang kita definisikan sendiri ruang lingkup fungsi tersebut yang dipakai. Semua variabel yang digunakan dalam suatu fungsi secara default terbatas pada ruang lingkup fungsi tersebut. Sebagai contoh,
1 2 $a = 1; /* global scope */ 3 4 Function Test () { 5 echo $a; /* rujukan ke variabel lokal */ 6 } 7 8 Test (); 9 |
Skrip ini tidak akan memberikan hasil karena perintah echo merujuk pada variabel $a yang berlaku di lokal, dan variabel ini belum diisikan dengan nilai pada ruang lingkup tersebut. Anda mungkin dapat melihat bahwa ini sedikit berbeda bahasa C, pada C variabel global secara otomatis dikenali oleh fungsi kecuali didefinisikan lagi dalam fungsi. Ini bisa menyebabkan masalah jika secara tak sengaja seseorang mengubah variabel global. Dalam PHP variabel global harus dideklarasikan global di dalam fungsi jika fungsi tersebut ingin menggunakannya. Contoh,
1 2 $a = 1; 3 $b = 2; 4 5 Function Sum () { 6 global $a, $b; 7 8 $b = $a + $b; 9 } 10 11 Sum (); 12 echo $b; 13 |
Skrip diatas akan menghasilkan "3". Dengan mendeklarasikan $a dan $b sebagai variabel global dalam fungsi, semuanya proses yang berhubungan dengan keduanya akan mengubah variabel global. Tidak batasan jumlah variabel global yang dapat dimanipulasi oleh sebuah fungsi.
Cara kedua untuk mengakses variabel dari ruang lingkup global adalah dengan menggunakan array khusus yang didefinisikan oleh PHP, yaitu $GLOBALS. Contoh sebelumnya dapat ditulis sebagai berikut,
1 2 $a = 1; 3 $b = 2; 4 5 Function Sum () { 6 $GLOBALS["b"] = $GLOBALS["a"] + $GLOBALS["b"]; 7 } 8 9 Sum (); 10 echo $b; 11 |
Array $GLOBALS adalah array asosiatif dimana nama variabel global dipakai sebagai key dan isi variabel tersebut adalah nilai elemen arraynya.
Sifat penting lainnya dari ruang lingkup adalah apa yang disebut dengan variabel static. Variabel static hanya terdapat dalam ruang lingkup lokal suatu fungsi, akan tetapi ia tidak akan kehilangan nilainya jika pelaksanaan program keluar dari ruang lingkup ini. Perhatikan contoh ini:
1 2 Function Test () { 3 $a = 0; 4 echo $a; 5 $a++; 6 } 7 |
Fungsi ini tidak begitu berguna karena setiap ia dipanggil ia akan memberikan nilai 0 pada $a kemudian mencetak "0". $a++ yang menaikkan nilai variabel tidak ada gunanya karena jika fungsi sudah selesai dijalankan variabel $a akan dihapus. Agar fungsi ini ada gunanya, supaya tidak kehilangan nilai perhitungan yang berlaku, variabel $a harus dideklarasikan sebagai static:
1 2 Function Test () { 3 static $a = 0; 4 echo $a; 5 $a++; 6 } 7 |
Variabel static juga menyediakan satu cara yang berhubungan fungsi-fungsi rekursif. Sebuah fungsi rekursif adalah fungsi yang memanggil dirinya sendiri. Kita harus berhati-hati menulis fungsi rekursif sebab bisa saja fungsi tersebut akan berulang terus menerus. Anda harus yakin ada kondisi yang bisa dipenuhi supaya proses pengulangan berhenti. Fungsi rekursi sederhana berikut akan menghitung sampai 10, dengan menggunakan variabel static $count untuk mengetahui kondisi kapan harus berhenti.
1 2 Function Test () { 3 static $count = 0; 4 5 $count++; 6 echo $count; 7 if ($count < 10) { 8 Test (); 9 } 10 $count--; 11 } 12 |
1 2 $a = "hello"; 3 |
1 2 $$a = "world"; 3 |
1 2 echo "$a ${$a}"; 3 |
1 2 echo "$a $hello"; 3 |
Untuk memakai variabel yang berubah-ubah dengan array, anda harus memperhitungkan masalah yang bisa saja membingungkan. Sebagai contoh, jika anda menulis $$a[1] maka pemroses harus tahu apakah anda bermaksud menggunakan $a[1] sebagai variabel atau anda menginginkan $$a sebagai variabel dan [1] adalah indeks dari variabel tersebut. Sintaksis untuk menghindari keraguan seperti ini adalah:${$a[1]} untuk kasus yang pertama dan ${$a}[1] untuk kasus yang kedua.
Contoh 7-1. Variabel formulir sederhana
|
Ketika dikirimkan, PHP akan membuat variabel $name, yang berisi apa saja yang diberikan pada field Name: di formulir.
PHP juga mengerti array dalam konteks variabel-variabel formulir, akan
tetapi hanya terbatas pada ukuran satu dimensi. Anda bisa, sebagai contoh,
mengumpulkan variabel-variabel yang berhubungan, atau menggunakan kemampuan
ini untuk mengambil nilai dari input select yang banyak.
Contoh 7-2. Variabel formulir yang lebih kompleks.
|
Jika track_vars PHP diaktifkan, baik dengan mengunakan setting konfigurasi track_vars atau direktif <?php_track_vars?>, maka variable yang dikirimkan melalui metode POST atau GET akan dapat ditemukan dalam array asosiatif global $HTTP_POST_VARS dan $HTTP_GET_VARS.
1 2 <input type=image src="image.gif" name="sub"> 3 |
Saat pengguna menekan tombol mouse di dalam daerah gambar, formulir akan dikirim ke server dengan dua variabel tambahan, yaitu sub_x and sub_y. Variabel tersebut akan berisi koordinat dalam gambar yang di klik. Bagi yang sudah berpengalaman mungkin dapat melihat nama variabel yang dikirimkan oleh browser berisi tanda "titik" bukan garis bawah, akan tetapi PHP akan mengkonversi titik tersebut menjadi garis bawah secara otomatis.
Jika anda ingin memberikan banyak nilai pada satu cookie, tambahkan [] pada nama cookie. Sebagai contoh,
1 2 SetCookie ("MyCookie[]", "Testing", time()+3600); 3 |
Contoh-3. Contoh SetCookie
|
1 2 echo $HOME; /* Shows the HOME environment variable, if set. */ 3 |
Informasi yang datang dari mekanisme GET, POST dan cookie juga secara otomatis menciptakan variabel, kadang-kadang lebih baik membaca variabel dari lingkungan secara eksplisit untuk memastikan bahwa anda mendapatkan versi yang tepat dari variabel yang bersangkutan. Fungsi getenv() dapat digunakan untuk ini. Anda juga bisa membuat variabel lingkungan dengan fungsi putenv().
1 2 $varname.ext; /* nama variabel yang tidak diperbolehkan */ 3 |
Sekarang yang dilihat oleh pemroses adalah variabel yang diberi nama $varname, diikuti operator penggabungan string, kemudian diikuti dengan string biasa (yaitu, string yang tidak diberi tanda petik dan bukan nama yang didefinisikan di tempat lain) 'ext'. Tentu saja, ini tidak akan menghasilkan sesuai dengan apa yang diharapkan.
Karena alasan ini, harus selalu diingat bahwa PHP secara otomatis akan mengganti setiap tanda "titik" nama-nama variabel yang diberikan kepadanya dengan garis bawah.