Belajar PHP Part 39 : Reference (Alias)

reference

  • Reference adalah mengakses variable yang sama dengan nama variable yang berbeda
  • Reference di PHP tidak sama dengan reference di bahasa pemrograman seperti C/C++ yang memiliki fitur pointer
  • Analogi reference itu seperti file, jika variable adalah file, dan value nya adalah isi file nya, maka reference adalah membuat shortcut (di Windows) atau alias (di Linux/ Mac) terhadap file yang sama
  • Saat kita mengubah isi value dari reference, maka secara otomatis value variable aslinya pun berubah
  • Untuk membuat reference terhadap variable, kita bisa menggunakan karakter &

 Assign By Reference

  • Pertama, PHP reference bisa memungkinkan kita bisa membuat beberapa variable menuju ke value yang sama

$name = "Eko";

$otherName = &$name; //assign by reference
$otherName = "Budi";

echo $name . PHP_EOL;
assign by reference

Variable $otherName = "&$name"; menjadi alias dari variable $name ="Eko"; dan nilainya akan di copy otomatis ke $otherName.

Ketika variable $otherName membuat value baru, secara otomatis nilai pada $name akan ikut berubah.

Pass By Reference

  • Selanjutnya yang bisa dilakukan di PHP adalah, mengirim data ke function dengan reference
function increment(int $value) {
    $value++;
}

$counter = 1; 

 

increment($counter);

echo $counter;
tanpa pass by reference

saat melaukan call increment($counter); sebenarnya kita hanya melakukan pengiriman 1 ke function, dan $counter = 1; nilainya tidak akan bertambah.

atau 

function increment(int &$value) {
    $value++;
}

$counter = 1;
increment($counter);

echo $counter . PHP_EOL;

pass by reference

Dengan menambahkan & pada argument $value di function increment, secara otomatis akan melakukan pass by reference ke variable  $counter.

Returning References

  • PHP juga bisa mengembalikan reference pada function
  • Namun hati-hati, gunakan fitur ini memang ada alasannya, karena fitur ini bisa membingungkan
  • Jarang digunakan fitur returning references saat membuat sebuah aplikasi
function &getValue () {
    static $value = 100;
    return $value;
}

$a = &getValue();
$a = 200;

$b = &getValue();
echo $b . PHP_EOL;
returning references

Next Post Previous Post
No Comment
Add Comment
comment url