Важно понимать, что вы делаете, назначая по ссылке или значению. Пойдем по очереди.
$a = array('one');
Место расположения памяти, мы назовем его M1. $ a указывает на M1 и внутри M1 мы имеем массив с 1 входом, назовем его M1-A1.
$b[0] = &$a[0];
Теперь то, что мы делаем, указывает на $ b [0] на M1-A1. Помните, что $ a [0] также указывает на M1-A1, поэтому оба указывают на эту конкретную часть памяти. Помните, что в самом $ b есть собственное место памяти, M2, но внутри M2 мы указываем M1-A1 (т. Е. M2-A1 указывает на M1-A1).
$c = $a;
Поскольку мы не назначая по ссылке, что мы получаем новое место в памяти, давайте назовем его M3, но в пределах М3 есть массив с первым элементом все еще указывает на M1-A1.
Итак, теперь у нас есть M1, M2, M3 с массивом в M2 и M3, указывающим на M1-A1.
$b[0] = 'three';
С $ Ь [0] на самом деле указывает на M1-A1, мы на самом деле изменения значения пятне памяти M1-A1. Таким образом, все, что указывает на место M1-A1, также увидит изменение этого значения.
$a = array('two');
Мы полностью меняем местоположение памяти для $ a на этом этапе. Первоначально это был M1, теперь мы создаем новую ячейку памяти, M4. Ничто другое не указывает на M4 и M4-A1 НЕ указывает на M1-A1.
Итак, когда мы делаем дамп var, мы получаем значения, которые вы упомянули.
Я, вероятно, сделал это более запутанным, но попробуйте нарисовать его на бумаге, и это будет довольно ясно. Поймите, что все хранится в памяти, а переменные просто указывают на места в памяти. Как только вы поймете этот принцип, все встанет на свои места.
Что вы пытаетесь достичь? Трудно помочь, если мы не знаем, почему вы делаете ссылки в первую очередь. –
Любой может создать сложный код, который они не понимают. Вместо того, чтобы выяснять, что не работает, почему бы не попробовать на самом деле отгонять то, что вы пытаетесь сделать, и решить эту проблему. О, и не используйте ссылки (как правило) ... – ircmaxell
Это то, что я делаю.Я должен динамически связывать переменные с mysqli_stmt :: bind_result, поэтому я делаю это, для ($ i = 0; $ i <$ n_result; $ i ++) {$ b_res [$ i] = & $ result [$ i] ; } call_user_func_array (array ($ stmt, "bind_result"), $ b_res) Где $ result - количество столбцов, возвращаемых после выполнения. Затем, когда я это делаю, while ($ stmt-> fetch()) {array_push ($ r_val, $ b_res);} все, что я получаю, это последняя строка из набора результатов. Это происходит из-за проблемы, которую я опубликовал. Есть ли способ, который я могу только скопировать значение в новую переменную, а затем вернуть его? – maurya8888