BAB 8.2B-1 – VARIABLE SCOPE (RUANG LINGKUP VARIABEL)
Tujuan Pembelajaran
Setelah mempelajari bab ini, peserta didik diharapkan mampu:
- Menjelaskan pengertian Variable Scope.
- Memahami Local Scope.
- Memahami Global Scope.
- Menggunakan keyword
global. - Menggunakan array
$GLOBALS. - Memahami Static Variable.
- Menentukan jenis scope yang tepat sesuai kebutuhan.
- Menerapkan Variable Scope dalam studi kasus aplikasi sederhana.
Pendahuluan
Pada bab sebelumnya kita telah mempelajari cara membuat function.
Perhatikan contoh berikut.
<?php
function salam()
{
echo "Halo Dunia";
}
salam();
?>
Program tersebut berjalan dengan baik.
Namun bagaimana jika kita mempunyai variabel seperti berikut?
<?php
$nama = "Andi";
function tampilkan()
{
echo $nama;
}
tampilkan();
?>
Apakah program akan menampilkan:
Andi
Jawabannya adalah tidak.
Mengapa?
Karena variabel mempunyai ruang lingkup (scope).
Apa itu Variable Scope?
Variable Scope adalah cakupan atau wilayah di mana sebuah variabel dapat digunakan.
Setiap variabel yang dibuat di PHP memiliki batas penggunaan.
Ilustrasi sederhana:
Program
│
├── Variabel Global
│
├── Function A
│ └── Variabel Local
│
├── Function B
│ └── Variabel Local
│
└── Function C
└── Variabel Local
Artinya:
- Variabel global berada di luar function.
- Variabel local berada di dalam function.
- Keduanya memiliki aturan penggunaan yang berbeda.
Jenis Variable Scope
PHP memiliki beberapa jenis ruang lingkup variabel:
- Local Scope
- Global Scope
- Static Scope
Pada bab ini ketiga jenis tersebut akan dipelajari secara bertahap.
Local Scope
Pengertian
Local Scope adalah variabel yang dibuat di dalam function.
Variabel ini hanya dapat digunakan oleh function tersebut.
Contoh:
<?php
function biodata()
{
$nama = "Andi";
echo $nama;
}
biodata();
?>
Output
Andi
Program berjalan normal.
Variabel Local Tidak Dapat Diakses dari Luar Function
Perhatikan contoh berikut.
<?php
function biodata()
{
$nama = "Andi";
}
biodata();
echo $nama;
?>
Hasil:
Undefined variable $nama
Mengapa?
Karena $nama hanya hidup di dalam function biodata().
Begitu function selesai dijalankan, variabel tersebut tidak dapat diakses lagi.
Setiap Function Memiliki Variabel Sendiri
Perhatikan contoh berikut.
<?php
function siswaA()
{
$nama = "Andi";
echo $nama;
}
function siswaB()
{
$nama = "Budi";
echo "<br>";
echo $nama;
}
siswaA();
siswaB();
?>
Output
Andi
Budi
Meskipun sama-sama bernama $nama, kedua variabel tersebut tidak saling memengaruhi karena masing-masing berada pada function yang berbeda.
Kelebihan Local Scope
Menggunakan Local Scope memiliki beberapa keuntungan:
- Variabel lebih aman.
- Mengurangi konflik nama.
- Program lebih modular.
- Lebih mudah dipelihara.
Karena alasan inilah programmer profesional lebih sering menggunakan variabel lokal dibandingkan variabel global.
Global Scope
Pengertian
Global Scope adalah variabel yang dibuat di luar function.
Contoh:
<?php
$nama = "Andi";
echo $nama;
?>
Output
Andi
Variabel ini dapat digunakan di area program utama.
Namun, apakah dapat langsung digunakan di dalam function?
Global Scope Tidak Otomatis Masuk ke Function
<?php
$nama = "Andi";
function tampilkan()
{
echo $nama;
}
tampilkan();
?>
Hasil:
Undefined variable $nama
Hal ini sering membingungkan programmer pemula.
Penyebabnya adalah function memiliki ruang lingkup sendiri.
Menggunakan Keyword global
Jika ingin menggunakan variabel global di dalam function, gunakan keyword global.
Contoh:
<?php
$nama = "Andi";
function tampilkan()
{
global $nama;
echo $nama;
}
tampilkan();
?>
Output
Andi
Keyword global memberi tahu PHP bahwa variabel tersebut berasal dari luar function.
Menggunakan Lebih dari Satu Variabel Global
<?php
$nama = "Andi";
$kelas = "XI RPL";
function dataSiswa()
{
global $nama, $kelas;
echo $nama;
echo "<br>";
echo $kelas;
}
dataSiswa();
?>
Output
Andi
XI RPL
Mengubah Nilai Variabel Global
Variabel global dapat diubah dari dalam function.
<?php
$nilai = 80;
function ubahNilai()
{
global $nilai;
$nilai = 95;
}
ubahNilai();
echo $nilai;
?>
Output
95
Programmer harus berhati-hati karena perubahan ini akan memengaruhi seluruh program.
Mengenal Array $GLOBALS
Selain keyword global, PHP menyediakan array khusus bernama $GLOBALS.
Array ini menyimpan seluruh variabel global.
Contoh:
<?php
$a = 10;
$b = 20;
function jumlah()
{
echo $GLOBALS['a'] + $GLOBALS['b'];
}
jumlah();
?>
Output
30
Menampilkan Isi $GLOBALS
<?php
$nama = "Andi";
$umur = 17;
print_r($GLOBALS);
?>
Program akan menampilkan seluruh variabel global yang tersedia beserta informasi lain yang disediakan PHP.
Kapan Menggunakan $GLOBALS?
Penggunaan $GLOBALS sebaiknya dibatasi pada kondisi tertentu.
Pada aplikasi modern, penggunaan parameter dan return lebih disarankan dibandingkan terlalu banyak mengakses variabel global.
Static Variable
Pengertian
Biasanya variabel lokal akan hilang setelah function selesai dijalankan.
Namun bagaimana jika kita ingin nilainya tetap tersimpan?
Gunakan keyword static.
Contoh Tanpa Static
<?php
function hitung()
{
$angka = 1;
echo $angka;
$angka++;
}
hitung();
echo "<br>";
hitung();
?>
Output
1
1
Mengapa selalu 1?
Karena setiap function dipanggil, variabel dibuat ulang.
Contoh Menggunakan Static
<?php
function hitung()
{
static $angka = 1;
echo $angka;
echo "<br>";
$angka++;
}
hitung();
hitung();
hitung();
?>
Output
1
2
3
Nilai $angka tetap tersimpan meskipun function selesai dijalankan.
Studi Kasus 1 – Penghitung Jumlah Pengunjung
<?php
function counter()
{
static $jumlah = 0;
$jumlah++;
echo "Pengunjung ke-".$jumlah."<br>";
}
counter();
counter();
counter();
counter();
?>
Output
Pengunjung ke-1
Pengunjung ke-2
Pengunjung ke-3
Pengunjung ke-4
Studi Kasus 2 – Nomor Antrian
<?php
function nomorAntrian()
{
static $nomor = 100;
echo "Nomor : ".$nomor."<br>";
$nomor++;
}
nomorAntrian();
nomorAntrian();
nomorAntrian();
?>
Output
Nomor : 100
Nomor : 101
Nomor : 102
Perbandingan Jenis Scope
| Jenis | Lokasi | Dapat Diakses |
|---|---|---|
| Local | Di dalam function | Hanya function tersebut |
| Global | Di luar function | Program utama |
| Static | Di dalam function | Nilainya tetap tersimpan antar pemanggilan function |
Best Practice Programmer
Gunakan Local Scope Sebisa Mungkin
Semakin sedikit variabel global, semakin mudah program dipelihara.
Hindari Terlalu Banyak Menggunakan global
Lebih baik mengirim data menggunakan parameter dan menerima hasil melalui return.
Gunakan Static Hanya Bila Dibutuhkan
Static cocok untuk penghitung (counter), cache sederhana, atau nomor urut, tetapi tidak perlu digunakan pada semua variabel.
Kesalahan yang Sering Dilakukan Pemula
Menganggap Variabel Global Otomatis Masuk ke Function
echo $nama;
di dalam function tidak akan bekerja tanpa global atau $GLOBALS.
Menggunakan Static Padahal Tidak Diperlukan
Akibatnya nilai variabel terus bertambah dan menghasilkan hasil yang tidak diharapkan.
Terlalu Banyak Variabel Global
Program menjadi sulit dipahami dan rawan bug karena banyak bagian dapat mengubah nilai variabel yang sama.
Latihan Praktik
Latihan 1
Buat function yang memiliki variabel lokal berisi nama siswa, kemudian tampilkan hasilnya.
Latihan 2
Buat variabel global $sekolah, lalu tampilkan nilainya dari dalam function menggunakan keyword global.
Latihan 3
Gunakan $GLOBALS untuk menjumlahkan dua buah variabel global.
Latihan 4
Buat function counter() menggunakan variabel static sehingga menghasilkan output:
1
2
3
4
5
Latihan 5
Buat program yang memiliki variabel lokal dan global dengan nama yang sama. Amati perbedaannya ketika ditampilkan.
Tugas Praktik Bab 8.2B-1
Sistem Nomor Tiket Pelayanan
Buat program PHP yang mensimulasikan sistem antrean pada loket pelayanan dengan ketentuan:
- Gunakan variabel
staticuntuk menyimpan nomor antrean. - Buat function
ambilNomor()yang akan:- Menampilkan nomor antrean saat ini.
- Menambah nomor untuk pemanggilan berikutnya.
- Gunakan variabel global untuk menyimpan nama instansi, misalnya:
$instansi = "SMK Negeri 1";
- Tampilkan nama instansi dari dalam function menggunakan keyword
global. - Panggil function
ambilNomor()minimal lima kali sehingga terlihat nomor antrean bertambah secara otomatis.
Tantangan (Opsional)
- Tambahkan format nomor seperti
A001,A002,A003, dan seterusnya. - Buat function kedua
resetNomor()untuk mengembalikan nomor antrean ke nilai awal (petunjuk: materi ini akan lebih mudah diselesaikan setelah memahami konsep yang lebih lanjut pada bab berikutnya).
