Referensi operator tugas di PHP, = &

Jawaban:

121

Ini tidak usang dan sepertinya tidak akan terjadi. Ini adalah cara standar untuk, misalnya, membuat bagian dari satu larik atau objek yang mencerminkan perubahan yang dibuat ke larik lain, daripada menyalin data yang ada.

Ini disebut penugasan dengan referensi , yang, mengutip manual, "berarti bahwa kedua variabel akhirnya menunjuk pada data yang sama, dan tidak ada yang disalin di mana pun" .

Satu-satunya hal yang tidak digunakan lagi =&adalah "menetapkan hasil newberdasarkan referensi" di PHP 5 , yang mungkin menjadi sumber kebingungan. newsecara otomatis ditetapkan dengan referensi, begitu &juga redundan / deprecated in $o = &new C;, tapi tidak in $o = &$c;.


Karena sulit untuk mencari, perhatikan bahwa =&( sama dengan ampersand ) adalah sama dengan = &( sama dengan spasi ampersand ) dan sering ditulis sedemikian rupa sehingga berjalan ke variabel lain seperti $x = &$y['z'];atau $x = &$someVar( nama variabel tanda ampersand dolar ). Contoh yang disederhanakan dari dokumen:

$a = 3;
$b = &$a;
$a = 4;
print "$b"; // prints 4

Berikut tautan praktis ke bagian terperinci tentang Tetapkan Dengan Referensi di manual PHP . Halaman itu adalah bagian dari seri referensi - ada baiknya meluangkan waktu sebentar untuk membaca keseluruhan seri.

pengguna56reinstatemonica8
sumber
8
catatan samping: "karena sulit untuk menelusuri" : symbolhound.com adalah teman Anda untuk hal-hal seperti ini.
billynoah
1
@billynoah Wow! symbolhound sekarang secara permanen ditambahkan ke kotak peralatan saya.
Parapluie
26

Ini dua operator yang berbeda. =adalah tugas seperti yang mungkin Anda ketahui. Dan &artinya variabel harus diakses dengan referensi daripada dengan nilai.

Asaf
sumber
60
Maaf, tapi ini terlalu sederhana. $ a = & $ b berarti membuat variabel $ a mengacu pada hal yang sama dengan yang dilakukan $ b sekarang. Setelah ini, $ a = 5; juga akan mengakibatkan $ b memiliki 5. Namun tautan referensi mungkin rusak oleh $ b = & $ xyz; atau tidak disetel ($ b); Pada saat $ a akan menjadi satu-satunya variabel yang mengetahui di mana sel yang menyimpan 5. Juga berhati-hatilah jika Anda menyetel $ a using = &, Anda harus menggunakan = & lain kali (atau unset ($ a)) untuk mengubah link referensi $ a, khususnya $ a = NULL; tidak akan merusak tautan, itu hanya mengganti 5 dengan null;
Don
8
@ Don: Terima kasih atas penjelasannya. Saya tahu Anda seorang programmer C.
Asaf
8
Aku setuju dengan apa yang dikatakan Don. Tetapi saya tidak akan mengatakan ini terlalu sederhana. Saya akan mengatakan ini salah.
Artefacto
@Don Anda benar-benar harus memposting komentar Anda sebagai jawaban.
Adam
7
$x = &$y['z'];

juga memiliki efek membuat $y['z']jika tidak ada, dan menyetelnya ke null.

Ini mencegah pesan kesalahan yang mungkin ingin Anda baca. Saya belum menemukan dokumentasi tentang ini; mungkin baru di 5.3, sejauh yang saya tahu.

malcanso
sumber