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.
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).
Terimakasih banyak , tutorialnya mudah di mengerti dengan baik
Masih bingung, $b+10 hasilnya 35 dan $a ikut-ikutan jadi 35, jadi mengubah $b juga mengubah $a ya?
Konsep tentang assignment by reference atau dikenal juga dengan istilah pointer ini memang sedikit membuat bingung, Tapi mudah2an dari penjelasan diatas bisa dipahami :)
Iy bang ane juga kok bingung yaa ,nilai $a kok jadi 35 .yang berubah kan hanya $b karena +10, apa ada penjelasan lain bang andre dari contoh yang sama agar kita lebih paham ? Terima kasih sebelumnya
Untuk penjelasan lain saya belum punya nih, mungkin bisa di cari di google artikel lain yang membahas "assignment by reference PHP".
Atau di bahasa pascal, ada konsep "pointer" yang merupakan prinsip kerja dari "assignment by reference": https://www.duniailkom.com/tutorial-belajar-pascal-pengertian-dan-cara-penggunaan-tipe-data-pointer-pascal/
Thanks master infonya
Om pada baris ke 14 kok variable $a hasilnya 25 ? darimana itu om ?
Dari sini gan:
$a = 20; (baris ke 2)
$a = $a + 5; (baris ke 9)
Jadi 20 + 5 = 25 :)
masih bingung pada tutorial assigment by value
<?php
$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
?>
kenapa $c kok ngga jadi 10? padahal kan nilai awal $c = 5 terus pada baris $a = $b = $c+5; $c ditambah dengan 5 kan?
Di dalam bahasa pemrograman, nilai sebuah variabel baru akan berubah ketika terdapat operator 'assignment', yakni tanda sama dengan (=).
Perintah: $b = $c+5;
Yang akan berubah hanya variabel $b, sedangkan $c tidak berubah nilainya.
Assalamualaikum,
Mas Andre, maaf saya masih bingung kenapa hasil dari $b = 10 ? (Operator Assignment by Value).
Mohon penjelasannya.
Terima kasih.
Bagian yang ini y?
$a = $b = $c+5;
Di dalam bahasa pemrograman, operasi assignment (memberikan sebuah nilai ke dalam variabel), diproses dari kanan ke kiri. Jadi berbeda dengan proses yang biasa kita buat dalam matematika (dari kiri ke kanan).
Operasi $c+5 akan diproses lebih dulu, kemudian hasilnya baru diinput ke dalam $b. Karena $c berisi angka 5, maka $b = 5 + 5, sehingga $b = 10.
Untuk teori dasar pemrograman, bisa pelajari juga tutorial bahasa pemrograman Pascal di duniailkom.
keren, detil, jelas
fungsi escape (\) yang ada disitu buat apa mas? trus beda echo "$a"; dengan echo $a; apa ya mas? sekian terima kasih
Kalau bisa coba dibaca2 mulai dari tutorial sebelumnya mas, semuanya sudah dibahas kok.
Untuk karakter escape dan beda echo, sudah saya bahas di part 15: https://www.duniailkom.com/mengenal-tipe-data-string-dan-cara-penulisan-string-dalam-php/
Om mau nanya tentang yang echo, buat php sekarang untuk kode seperti echo "$a = $a, $b = $b, $c = $c"; itu bakal menghasilkan 20 = 20, 15 = 15, 5 = 5. Soalnya di browser saya seperti itu hasilnya
Betul, hasilnya memang seperti itu. Saya pakai karakter "\" agar tanda dollar tidak diproses oleh PHP:
echo "\$a = $a, \$b = $b, \$c = $c";