5. Ruang Lingkup Variabel

PHP: Ruang Lingkup Variabel (Global, Lokal dan Statis)

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.

Referensi

https://www.php.net/manual/en/language.variables.scope.php