За последние 24 часа нас посетили 45400 программистов и 1813 роботов. Сейчас ищут 830 программистов ...

Передача полученных by ref переменных дальше

Тема в разделе "Прочие вопросы по PHP", создана пользователем Sanito, 13 янв 2009.

  1. Sanito

    Sanito Активный пользователь

    С нами с:
    24 дек 2007
    Сообщения:
    15
    Симпатии:
    0
    Адрес:
    Киев
    Всем привет.

    Столкнулся с небольшой проблемой передачи параметров в функцию по ссылке (by ref).

    Есть некая библиотечная функция:
    Код (Text):
    1. function func1($var1, [&$refvar1][, &$refvar2][....] );
    Я хочу сделать обертку вокруг нее чтобы проверять корректность передаваемых данных плюс частично поменять логику так, как надо мне. Т.е. создать функцию

    Код (Text):
    1. function my_func1($var1, $var2, $var3, [&$refvar1][, &$refvar2][....] )
    2. {
    3.     // ...
    4. }
    Проблема в том, что имеющийся механизм работы с переменным кол-ом параметров func_num_args()/func_get_arg(N) возвращает только значения переменных, ссылку получить невозможно:

    Собственно, вопрос в том, можно ли такое сделать каким-либо образом, может есть какая возможность получить void** на аргументы :D ? И если да, то покажите куда рыть.

    Зараннее спасибо всем небезразличным! :)
     
  2. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Собственно никак, тебе придётся напрямую использовать аргументы, которые ты хочешь передать по ссылке.
     
  3. Sanito

    Sanito Активный пользователь

    С нами с:
    24 дек 2007
    Сообщения:
    15
    Симпатии:
    0
    Адрес:
    Киев
    Ну тупой, но надежный, метод я уже придумал.

    Правда, он из серри throughass, однако работать будет 100%.

    Хочется "по-научному" сделать, используя, возможно, нестандартный подход.

    Вопрос - куда копать.
     
  4. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Sanito
    Передавай массивом
     
  5. Sanito

    Sanito Активный пользователь

    С нами с:
    24 дек 2007
    Сообщения:
    15
    Симпатии:
    0
    Адрес:
    Киев
    Массивом чего? Массивом ссылок на переменные?

    Чувак, это не С, тут нет указателей.
     
  6. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Наверное, имелась ввиду такая конструкция
    PHP:
    1. test_ref(array(1, 2, 3, &$x, &$y));
     
  7. Sanito

    Sanito Активный пользователь

    С нами с:
    24 дек 2007
    Сообщения:
    15
    Симпатии:
    0
    Адрес:
    Киев
    Код (Text):
    1. <?
    2. function system_routine(&$var)
    3. {
    4.     $var = 'SUCCESS!';
    5. }
    6.  
    7. function my_routine($var)
    8. {
    9.     system_routine($var[0]);
    10. }
    11.  
    12. $x = 'Failed';
    13. my_routine(array(&$x));
    14. echo $x . "\n";
    15. ?>
    Действительно выводит 'SUCCESS!', спасибо, хотя для меня такой вариант оказался неожиданностью.

    Вариант имеет право на жизнь, хотя не очень красиво передавать массивом переменные, но если выхода нет, что ж делать.

    Может кто-то еще что подскажет?