Penggunaan fungsi REMOVEALL pada PHP

Pada tutorial sebelumnya kita telah mengdiskusikan tentang pembuatan fungsi dengan menggunakan argumen atau parameter dan juga pembuatan fungsi tanpa menggunakan parameter.

Dalam tutorial kali ini, kita masih menyinggung seputaran pembuatan fungsi. Fungsi yang akan kita bahas dalam kesempatan ini adalah pembuatan fungsi pass by reference.

Pembuatan fungsi pass by reference memiliki arti : nilai yang dilewatkan dalam sebuah argumen / paremeter dalam memanggil fungsi tersebut akan ikut berubah, sehingga nilai hasil olahan tersebut dapat digunakan diluar fungsi . Hal ini bertolak belakang jika kita menggunakan model pass by value, nilai yang dikirimkan ke fungsi yang dipanggil tidak dapat digunakan diluar fungsi tersebut.

Untuk dapat memahami perbedaan pass by value dengan pass by reference, perhatikan contoh dibawah ini :

<?php
 function tambah2($num) {
 $num += 2;
 }
 
 function tambah2(&$num) {
 $num += 2;
 }
 
 $nilai_awal = 10;
 tambah2($nilai_awal);
 
 echo "Nilai Awal adalah : $nilai_awal<br />";
 
 tambah2( $nilai_awal );
 echo "Nilainya menjadi : $nilai_awal<br />";
?>

Outputnya :

Nilai Awal adalah : 10
Nilainya menjadi : 12

Jika kita perhatikan nilai dari variabel $nilai_awal ketika dilewatkan pada fungsi tambah2 tidak berubah nilainya begitu dicetak diluar fungsi tersebut, yaitu :10. Sedangkan pada fungsi tambah2, nilainya menjadi 12 begitu dicetak diluar fungsi tambah2.

Pada contoh diatas, yang menjadi fungsi pass by reference adalah function tambah2(&$num), sedangkan yang menjadi fungsi pass by value adalah function tambah2($num).

Jadi untuk membuat fungsi pass by reference, kita cukup menambahkan simbol & pada parameternya. Dengan demikian nilai yang diolah dan telah berubah pada fungsi pass by reference dapat diakses dari luar fungsi tersebut.

Tutorial PHP tentang fungsi lainnya :

  • Membuat fungsi dengan menerapkan parameter dan tanpa parameter
  • Mencari bilangan terbesar dari dua dan tiga inputan dengan membuat fungsi
  • Memahami fungsi return value pada pemrograman php
  • Membuat default parameter pada fungsi PHP

Dalam tutorial kali ini saya akan membahas tentang Pengertian dan Jenis-jenis Operator Assignment (Assignment Operators) dalam PHP, serta perbedaan antara Assignment by Value dan Assignment by References.


Pengertian Operator Assignment dalam PHP

Operator assignment adalah operator untuk menambahkan, atau memasukkan sebuah nilai kedalam variabel. PHP memiliki 3 jenis operator assigment, dan kita telah menggunakan 2 diantaranya, yaitu tanda = untuk mengdefenisikan variabel, dan tanda => untuk mengisi nilai dari array.


Jenis-jenis Operator Assigment dalam PHP

PHP mengenal 3 jenis operator assigment, yaitu Assigment dengan Nilai (Assignment by Value), Assigment Array, dan Assigment dengan Referensi (Assignment by Reference).

Pengertian Operator Assigment dengan Nilai (Assignment by Value)

Assigment dengan Nilai atau dalam istilah pemograman dikenal dengan Assignment by Value , adalah proses pemberian nilai kedalam sebuah variabel dengan meng-copy nilai atau value dari variabel lain.

PHP menggunakan tanda sama dengan (=) untuk Assignment by Value. Secara tidak sadar, kita telah banyak menggunakan operator ini dalam berbagai contoh pada tutorial sebelumnya. Pada saat menggunakan operator “=”, PHP meng-copy nilai (atau value), dari sisi kanan operator ke sisi kiri.

Operator Assignment by Value (dan juga operator assigment lainnya) memiliki arah proses kanan (dapat dilihat dalam tabel urutan proses pada Tutorial PHP: Pengertian Operand, Operator dan Urutan Operator dalam PHP) sehingga proses pemberian nilai kepada sebuah variabel dimulai dari kanan, seperti contoh berikut:

<?php
$a = 20;
$b = 15;
$c = 5;

echo "\$a = $a, \$b = $b, \$c = $c";
echo "<br />";
// hasil proses: $a = 20, $b = 15, $c = 5

$a = $b = $c+5;
echo "\$a = $a, \$b = $b, \$c = $c";
// hasil proses: $a = 10, $b = 10, $c = 5
?>

Pada contoh kode PHP diatas, saya mendefenisikan 3 variabel: $a, $b, dan $c dengan operator assigment by value. Perhatikan pada baris terakhir, dimana saya menuliskan kode $a = $b = $c+5, yang urutan pemrosesannya di mulai dari kanan ke kiri, sehingga yang diproses oleh PHP menjadi: $a = ($b = ($c+5)).

Pengertian Operator Assigment Array

Operator Assigment array adalah operator assigment untuk menginput nilai kedalam array. Operator ini menggunakan tanda panah (=>). Kita telah membahas cara pembuatan, dan penggunaan operator ini pada tutorial Mengenal Tipe Data Array dan Cara Penulisan Array dalam PHP.

Pengertian Assigment dengan Referensi (Assignment by Reference)

Assigment dengan referensi atau dalam istilah programmingnya: Assignment by Reference, adalah operator assigment khusus yang digunakan untuk men-copy nilai referensi dari sebuah variabel.

Pengalaman saya, assigment dengan referensi ini akan jarang digunakan, tetapi tetap penting untuk diketahui bahwa PHP menyediakan fitur ini.

Perhatikan contoh kode PHP berikut ini:

<?php
$a = 20;
$b = $a;

echo "\$a = $a, \$b = $b";
echo "<br />";
// hasil proses: $a = 20, $b = 20

$a = $a + 5;
echo "\$a = $a, \$b = $b";
echo "<br />";
// hasil proses: $a = 25, $b = 20

$b = $b + 10;
echo "\$a = $a, \$b = $b";
// hasil proses: $a = 25, $b = 30
?>

Dalam kode program diatas, saya membuat 2 buah variabel, yaitu $a dan $b. Variabel $a saya input dengan nilai 20, sedangkan variabel $b men-copy nilai dari variabel $a. Selanjutnya saya tampilkan kedua variabel tersebut menggunakan perintah echo.

Pada baris ke-9 saya menambahkan nilai variabel $a dengan 5, lalu menampilkan hasil kedua variabel tersebut. Selanjutnya pada baris ke-14 saya menambahkan $b dengan 10, lalu menampilkan hasilnya

Kata kunci disini adalah, variabel $b hanya men-copy nilai yang ada pada variabel $a, sehingga kedua variabel memiki nilai sendiri-sendiri dan terpisah, seperti yang terlihat dari hasil echo.

Bagaimana jika yang saya inginkan adalah: karena variabel $a=$b, maka ketika saya merubah nilai salah satu variabel, nilai pada variabel yang lain juga ikut berubah. Fitur inilah yang bisa didapatkan dengan Assignment by Reference.

Assignment by Reference dalam PHP menggunakan operator “= &”.

Perhatikan contoh kode PHP berikut yang sama persis dengan contoh sebelumnya, namun saya mengganti baris $b = $a, menjadi $b = &$a:

<?php
$a = 20;
$b = &$a;

echo "\$a = $a, \$b = $b";
echo "<br />";
// hasil proses: $a = 20, $b = 20

$a = $a + 5;
echo "\$a = $a, \$b = $b";
echo "<br />";
// hasil proses: $a = 25, $b = 25

$b = $b + 10;
echo "\$a = $a, \$b = $b";
// hasil proses: $a = 35, $b = 35
?>

Seperti yang dapat dilihat, bahwa sekarang kedua variabel ($a dan $b), seolah-olah saling terikat, sehingga ketika sebuah variabel diubah nilainya, variabel yang lain juga ikut berubah.


Perbedaan Assigment By Value, dengan Assigment By Reference

Agar lebih jelas, berikut adalah Perbedaan Proses Assigment By Value, dengan Assigment By Reference

Didalam bahasa pemograman (dan juga PHP), sebuah nilai dari variabel di simpan pada sebuah alamat  tertentu di memory komputer. Alamat memory inilah yang dimaksud dengan referensi.

Misalkan variabel $a memiliki nilai 20, dan berada pada lokasi memory 1013, ketika saya membuat kode program $b=$a, maka nilai (atau value) dari variabel $a di-copy ke dalam variabel $b yang mungkin saja akan berada pada lokasi memory 1014. Sehingga saat ini ada 2 buah lokasi memori untuk menampung nilai dari masing-masing variabel, $a pada lokasi 1013 dengan nilai 20, dan $b pada lokasi 1014 dengan nilai 20 (dicopy dari nilai $a).

Ketika saya menambahkan variabel $a dengan operasi $a = $a + 5, nilai pada lokasi memory 1013 akan menjadi 25, namun karena memiliki lokasi memory yang berbeda, nilai pada variabel $b akan tetap 20. Inilah proses yang terjadi ketika menggunakan Assigment By Value.

Bagaimana dengan Assigment By Reference?

Ketika variabel $a dengan nilai 20 berada di lokasi memory 1013, dan saya menjalankan perintah $b=&$a, maka yang terjadi adalah, alamat lokasi memory (referensi) untuk variabel $b dicopy dari nilai variabel $a, sehingga kedua variabel memiliki 1 alamat memory yang sama, yaitu 1013.

Karena alamat untuk variabel $a dan $b sama, maka ketika salah satu variabel mengubah nilai di alamat 1013, maka nilai tersebut akan berubah. Ketika saya menambahkan nilai variabel $a dengan operasi $a = $a + 5, nilai pada lokasi memory 1013 akan menjadi 25. Dan ketika saya tampilkan nilai dari variabel $b, maka PHP akan mencari nilai di lokasi memori 1013, dan menampilkan hasilnya, yakni 25. Kedua variabel $a dan $b terikat dengan 1 lokasi memory yang sama.


Dalam tutorial ini kita telah mempelajari tentang pengertian dan jenis operator assigment, serta perbedaan antara assigment by value dengan assigment by references. Konsep ini bersifat universal untuk berbagai bahasa pemograman (tidak hanya PHP).