За последние 24 часа нас посетили 16589 программистов и 1681 робот. Сейчас ищут 944 программиста ...

Передача в функцию произвольного количества указателей

Тема в разделе "Прочие вопросы по PHP", создана пользователем Int_20h, 18 июн 2014.

  1. Int_20h

    Int_20h Новичок

    С нами с:
    18 июн 2014
    Сообщения:
    2
    Симпатии:
    0
    Пытаюсь сделать обертку для функции mysqli_stmt_bind_param. Т.е. функцию вида

    Код (Text):
    1. function my_bind_param(){
    2.    $args = func_get_args();
    3.    $res = call_user_func_array('mysqli_stmt_bind_param', $args);
    4. }
    Однако, как я понимаю, func_get_args() возвращает не указатели на параметры, переданные в функцию, а массив копий их значений, а значит bind в случае такой реализации будет не полноценный. Т.е. отрабатывать он будет только один раз, только с теми значениями, которые были переданы в функцию.

    Я хочу сделать так, как в самом php, чтобы переменные именно биндились, т.е. работал вариант из документации:

    Код (Text):
    1. /* Prepare an insert statement */
    2. $query = "INSERT INTO myCity (Name, CountryCode, District) VALUES (?,?,?)";
    3. $stmt = $mysqli->prepare($query);
    4.  
    5. $stmt->bind_param("sss", $val1, $val2, $val3);
    6.  
    7. $val1 = 'Stuttgart';
    8. $val2 = 'DEU';
    9. $val3 = 'Baden-Wuerttemberg';
    10.  
    11. /* Execute the statement */
    12. $stmt->execute();
    13.  
    14. $val1 = 'Bordeaux';
    15. $val2 = 'FRA';
    16. $val3 = 'Aquitaine';
    17.  
    18. /* Execute the statement */
    19. $stmt->execute();
    20.  
    21. /* close statement */
    22. $stmt->close();
    Отсюда вопрос. Как внутри функции получить список указателей на переданные параметры, если количество параметров может быть произвольным?
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Передавать в функцию массив ссылок на переменные. И да, слово "указатель" тут не применимо ни в коем роде. Тут нет даже намека на прямую работу с памятью. Есть передача переменной по значению, есть по ссылке.
     
  3. Int_20h

    Int_20h Новичок

    С нами с:
    18 июн 2014
    Сообщения:
    2
    Симпатии:
    0
    Спасибо большое за помощь.
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Черт знает что она там возвращает. В новых версиях пхп массивы идут ссылками, так что хз.
     
  5. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    никак не получается внутри функции изменить переменную, ссылка на которую записана в массив. Хотя var_dump внутри функции и говорит, что это ссылка.
     
  6. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Мб потому что и сам массив желательно передать по ссылке?
     
  7. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Код (PHP):
    1. <?php
    2.  
    3. function change($array)
    4. {
    5.     $array[1] = 'bar';
    6. }
    7.  
    8. $var = 'foo';
    9. $array = ['x', &$var];
    10. //$array[1] = 'bar';
    11. change($array);
    12.  
    13. echo $var; // 'bar' 
     
  8. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Ага, еще со свойствами объектов так можно.

    До тех пор, пока их не изменят (если насильно не было указано).

    Добавлено спустя 46 секунд:
    Что понимать под полноценным биндом? Чем Вас не устраивает текущая реализация?