PHP фактически не имеет объявления переменных.Это означает, что в некоторых случаях вы можете ссылаться на переменные без фактического объявления их заранее.Я говорю некоторые случаи, потому что:
foreach($undefinedArray as $key=>$value){
// will give a notice and a warning
// notice: undefined variable
// warning: invalid argument to foreach
}
Но это не значит, что вы не можете сделать что-то вроде этого:
for($i=0;$i<5;$i++){
$undefinedArray[]=$i;
}
// will create an array with 5 indexes, each holding the numbers 0 through 4
Это работает, потому что $undefinedArray
не найден и не созданна лету.
Теперь по вашему делу.Я предполагаю, что вы имеете в виду этот пост .И я должен признать, что это очень интересное решение, я постараюсь удержаться от комментариев о каких-либо плохих практиках, но давайте перейдем к объяснению!
$params[] = &$row[$field->name];
Вот гдеволшебство происходит, и это на самом деле из-за &.Поскольку &$row['unknown_index']
, на самом деле создает индекс!
Это означает, что вышеприведенное утверждение делает 2 вещи.Сначала он создает массив, имя каждого столбца которого сохраняется в виде индекса в $row
($row[$field->name]
).Затем он сохраняет указатель на каждый из элементов из $row
в $params
.
call_user_func_array(array($stmt, 'bind_result'), $params);
Это делает $stmt->bind_result()
.Но передает каждый из элементов в $params
в качестве параметров в bind_result.И так как они передаются по ссылке, каждый индекс $ row будет содержать каждое из выбранных полей.
Остальное должно быть легко выяснить сейчас.
Если у вас есть какие-либо вопросы.Не стесняйтесь спрашивать!