Pertanyaan Apakah melewatkan variabel dengan referensi tidak lagi digunakan?


Ada sebuah komentar pada menjawab pada SO:

Kode sebagai jawaban:

$larry = & $fred;

Komentar:

Ini tidak lagi digunakan dan menghasilkan peringatan

Tapi saya rasa itu tidak benar. Atau itu?

Jadi pada dasarnya pertanyaannya adalah:

dapatkah saya menyalin variabel ke variabel lain dengan referensi?


5
2017-11-25 21:13


asal


Jawaban:


Tergantung pada tipe variabel apa $fred aku s. Jika itu objek, ini akan diteruskan sebagai referensi penunjuk ke objek (terima kasih NikiC) akan diteruskan sebagai nilai sebagai PHP 5, jadi tidak perlu secara eksplisit melakukannya. Sejauh ini, komentar itu benar.

Untuk semua tipe variabel lainnya, bagaimanapun, melewati referensi perlu secara eksplisit ditentukan dan tidak ditinggalkan. Meskipun dapat dikatakan bahwa biasanya tidak baik dalam praktek pemrograman untuk menggunakan banyak referensi dalam PHP.


7
2017-11-25 21:18



Cukup yakin itu tidak ditinggalkan. Saya telah melakukan hal-hal seperti itu banyak di PHP 5.3, pada dasarnya untuk alias array yang sangat bersarang. Sebagai contoh:

$short = &$a['really']['deep']['array']

Saat kamu melakukan $a = $b dan $a adalah objek yang menciptakan "referensi". Ini diilustrasikan dengan contoh terbaik:

>> $o = new stdClass()
stdClass::__set_state(array(
))
>> $o->a = 5
5
>> $o
stdClass::__set_state(array(
   'a' => 5,
))
>> $o2 = $o
stdClass::__set_state(array(
   'a' => 5,
))
>> $o2->a = 6
6
>> $o
stdClass::__set_state(array(
   'a' => 6,
))

Perhatikan keduanya $o->a dan $o2->a sekarang 6, meskipun kami hanya melakukan tugas pada salah satu dari mereka.

Kapan $a adalah primitif (atau skalar dalam PHP) seperti string, int atau float, ia berperilaku agak berbeda; variabel disalin:

>> $a = 1
1
>> $b = $a
1
>> $b = 2
2
>> $a
1

Perhatikan itu $a masih 1.

Ketika Anda menggunakan ampersand, bagaimanapun, pada dasarnya berfungsi sebagai alias. Setiap perubahan pada satu variabel akan mempengaruhi yang lain.

>> $c = 1
1
>> $d = &$c
1
>> $d = 2
2
>> $c
2

Perhatikan itu $c juga 2 sekarang.


2
2017-11-25 21:19



Ini mungkin membantu: Bagaimana simbol '&' dalam PHP mempengaruhi hasilnya? 


0
2017-11-25 21:18