Пытаюсь сделать обертку для функции mysqli_stmt_bind_param. Т.е. функцию вида Код (Text): function my_bind_param(){ $args = func_get_args(); $res = call_user_func_array('mysqli_stmt_bind_param', $args); } Однако, как я понимаю, func_get_args() возвращает не указатели на параметры, переданные в функцию, а массив копий их значений, а значит bind в случае такой реализации будет не полноценный. Т.е. отрабатывать он будет только один раз, только с теми значениями, которые были переданы в функцию. Я хочу сделать так, как в самом php, чтобы переменные именно биндились, т.е. работал вариант из документации: Код (Text): /* Prepare an insert statement */ $query = "INSERT INTO myCity (Name, CountryCode, District) VALUES (?,?,?)"; $stmt = $mysqli->prepare($query); $stmt->bind_param("sss", $val1, $val2, $val3); $val1 = 'Stuttgart'; $val2 = 'DEU'; $val3 = 'Baden-Wuerttemberg'; /* Execute the statement */ $stmt->execute(); $val1 = 'Bordeaux'; $val2 = 'FRA'; $val3 = 'Aquitaine'; /* Execute the statement */ $stmt->execute(); /* close statement */ $stmt->close(); Отсюда вопрос. Как внутри функции получить список указателей на переданные параметры, если количество параметров может быть произвольным?
Передавать в функцию массив ссылок на переменные. И да, слово "указатель" тут не применимо ни в коем роде. Тут нет даже намека на прямую работу с памятью. Есть передача переменной по значению, есть по ссылке.
никак не получается внутри функции изменить переменную, ссылка на которую записана в массив. Хотя var_dump внутри функции и говорит, что это ссылка.
Код (PHP): <?php function change($array) { $array[1] = 'bar'; } $var = 'foo'; $array = ['x', &$var]; //$array[1] = 'bar'; change($array); echo $var; // 'bar'
Ага, еще со свойствами объектов так можно. До тех пор, пока их не изменят (если насильно не было указано). Добавлено спустя 46 секунд: Что понимать под полноценным биндом? Чем Вас не устраивает текущая реализация?