Pada tutorial PHP dasar yang lalu, kita telah mempelajari dasar-dasar tipe data dan variabel, mulai dari peraturan penamaan variabel, cara pembuatan dan penggunannya.
Akan tetapi, kita masih baru di dasar-dasarnya saja, pada tutorial PHP tingkat menengah ini, kita akan memperdalam pelajaran kita: yaitu tentang ruang lingkup variabel di PHP dan jenis-jenis variabel ditinjau dari ruang lingkupnya.
Apa itu Ruang Lingkup Variabel?
Ruang lingkup variabel adalah jangkauan akses variabel tersebut.
Ada variabel yang bersifat global: ia bisa diakses dari bagian program mana pun dari berbagai file.
Ada variabel yang bersifat lokal: ia hanya bisa diakses oleh sebagian kode program tertentu dan tidak bisa diakses dari bagian yang lain.
Ada variabel yang bersifat statis: ia variabel yang bersifat tunggal, di mana pun ia berada, berapa kali pun ia dideklarasi, ia tetap dianggap satu.
Kita akan bahas masing-masing jenis variabel dalam tutorial ini.
Variabel Global
Seperti yang sudah disinggung sebelumnya: bahwa variabel global adalah variabel yang selalu bisa diakses kapan pun dan di mana pun. Bahkan dari file yang berbeda sekalipun.
Secara default, ketika kita mendeklarasikan variabel, variabel tersebut memiliki scope atau ruang lingkup global. Bisa diakses dari mana saja dari semua bagian kode program.
Sebagai contoh, katakanlah kita memiliki file seperti ini:
src
├── file-01.php
├── file-02.php
└── file-utama.php
File file-01.php
memiliki sebuah variabel, yaitu variabel $nama
yang secara otomatis ia memiliki ruang lingkup global. Perhatikan contoh berikut:
<?php
$nama = 'Nurul Huda'; // <-- variabel global
echo "file-01.php <br>";
echo "Nama: {$nama} <br><br>";
Sedangkan file-02.php
, ia tidak mendeklarasikan variabel $nama
sebelumnya. Akan tetapi ia meng-echo
variabel $nama
. Perhatikan kode program berikut:
<?php
echo "file-02.php <br>";
echo "Nama: {$nama} <br><br>";
// bahkan kita juga bisa mengubah isi dari variabel
// yang dideklarasikan di file yang lain
$nama .= ' bin Zakariyya';
Apakah bisa file-02.php
menampilkan variabel $nama
? Silakan anda jalankan, dan anda akan mendapati bahwa variabel $nama
kosong karena di dalam file tersebut variabel $nama
tidak pernah didefinisikan sebelumnya.
Bahkan, anda justru akan mendapatkan error PHP Notice: Undefined variable: nama in file-02.php.
Akan tetapi, ketika anda menggabungkan file-01.php
dan juga file-02.php
dengan perintah require, error yang sebelumnya ada pada file-02.php
tidak akan anda jumpai lagi karena sekarang semua variabel yang kita definisikan pada file-01.php
bersifat global dan bisa diakses dari file lain yang memuatnya dengan include()
mau pun require()
.
Perhatikan file-utama.php
berikut:
<?php
require 'file-01.php';
require 'file-02.php';
echo "file-utama.php <br>";
echo "Nama: {$nama} <br><br>";
Ketika kita jalankan file-utama.php
, output yang kita dapatkan adalah:
file-01.php
Nama: Nurul Huda
file-02.php
Nama: Nurul Huda
file-utama.php
Nama: Nurul Huda bin Zakariyya
Masih ada beberapa pembahasan lagi mengenai variabel global, pembahasannya akan kita akhirkan setelah pembahasan tentang variabel lokal.
Variabel Lokal
Beda dengan variabel global, variabel lokal tidak bisa diakses dari mana pun. Ia hanya bisa diakses dari scope di mana ia didefinisikan.
Dalam PHP, setiap variabel yang dideklarasikan di dalam sebuah fungsi, maka ia secara otomatis didefinisikan secara lokal. Dalam artian ia tidak bisa diakses di luar fungsi.
Perhatikan contoh berikut:
<?php
function haloDunia () {
$nama = "Nurul Huda";
}
haloDunia(); /* panggil fungsi haloDunia() */
echo $nama; /* error karena variabel $nama dalam fungsi haloDunia() bersifat lokal */
Atau, contoh sebaliknya:
<?php
$nama = "Nurul Huda"; /* variabel ini secara default bersifat global */
function haloDunia () {
echo $nama; /* sedangkan ini tereferensikan ke variabel lokal */
}
haloDunia();
Sehingga ketika program di atas kita eksekusi, hasilnya adalah kosong atau bahkan error. Karena variabel $nama
yang berusaha kita echo
di dalam fungsi haloDunia()
merujuk pada variabel lokal, alias variabel $nama
yang ada di dalam fungsi tersebut. Sedangkan di dalam fungsi tersebut tidak ada variabel $nama
sehingga hal tersebut membuat error Undefined variabel nama.
Bahkan, jika variabel global dan variabel lokal memiliki nama yang sama, ia tetap tidak tercampur satu sama lain. Perhatikan contoh berikut:
<?php
$nama = "Nurul Huda"; /* variabel global */
function haloDunia () {
$nama = "Wahid Abdullah"; # variabel lokal
echo $nama . '<br>'; # Wahid Abdullah
}
haloDunia();
echo $nama; # Nurul Huda
Output kode program di atas adalah:
Wahid Abdullah
Nurul Huda
Statement global
Lalu bagaimana jika kita ingin mereferensikan variabel global dalam sebuah fungsi? Sedangkan fungsi dalam PHP secara asal akan membuat scope-nya sendiri yang terpisah dengan variabel global?
Caranya adalah menggunakan statement global
.
Perhatikan contoh berikut:
<?php
$a = 5;
$b = 3;
function luas () {
global $a, $b;
$b = $a + $b;
}
luas();
echo "a = {$a} <br>";
echo "b = {$b} <br>";
Ketika program di atas dieksekusi, ia akan menghasilkan output sebagai berikut:
a = 5
b = 8
Variable $_GLOBALS
Selain menggunakan statement global
. Kita juga bisa menggunakan variabel bawaan PHP bernama $_GLOBALS
. Ia adalah variabel bertipe data array asosiatif dengan variabel global sebagai key-nya dan nilai dari variabel global sebagai value-nya.
Mari kita ubah kode program di atas menjadi seperti ini:
<?php
$a = 5;
$b = 3;
function luas () {
$_GLOBALS['b'] = $_GLOBALS['a'] + $_GLOBALS['b'];
}
luas();
echo "a = {$a} <br>";
echo "b = {$b} <br>";
Ketika program di atas dieksekusi, ia akan menghasilkan output sebagai berikut:
a = 5
b = 8
Variabel Statis
Di antara hal yang penting berkaitan dengan variable scope atau ruang lingkup variabel pada PHP adalah: variabel statis.
Variabel statis atau static variable adalah variabel lokal yang hanya khusus didefinisikan dalam sebuah fungsi. Akan tetapi, ia tetap mempertahankan nilainya dalam scope tersebut meskipun eksekusi program telah melewatinya.
Untuk lebih jelasnya, perhatikan kode program berikut:
<?php
function tes () {
$a = 0; # mendefinisikan variabel lokal
echo "a: {$a} <br>";
$a++; # increment variabel lokal
}
tes();
tes();
tes();
Jika dieksekusi, program di atas akan menghasilkan output seperti berikut:
a: 0
a: 0
a: 0
Kenapa nilai 0
tidak berubah padahal kita selalu men-increment-nya?
Itu karena variabel lokal, ketika program telah melewati ruang lingkupnya, ia akan dihapus.
Dan ketika fungsi tersebut dipanggil lagi, ia akan kembali membuat sebuah variabel lokal dengan nama $a
dan memberinya nilai 0
. Oleh karena itu meskipun kita memanggil fungsi tes()
sebanyak 3 kali, itu tidak berpengaruh sama sekali.
Sedangkan dengan static variable, variabel lokal tersebut tetap bisa mempertahankan nilainya sekalipun eksekusi program telah melewatinya.
Ubah kode program di atas menjadi seperti ini:
<?php
function tes () {
static $a = 0; # mendefinisikan variabel lokal
echo "a: {$a} <br>";
$a++; # increment variabel lokal
}
tes();
tes();
tes();
Jika dieksekusi, program di atas akan menghasilkan output seperti berikut:
a: 0
a: 1
a: 2
Pembahasan Selanjutnya
Setelah selesai dengan pembahasan ruang lingkup variael pada PHP beserta jenis-jenisnya, insyaallah pada pertemuan yang akan datang kita akan membahas beberapa variabel global bawaan PHP yang bisa kita gunakan.
Ikuti dan nantikan terus seri tutorial ini, jangan lupa share dan tinggalkan komentar, ya!
Terima kasih banyak.