За последние 24 часа нас посетили 56926 программистов и 1795 роботов. Сейчас ищут 942 программиста ...

Объясните про значек & в функциях

Тема в разделе "PHP для новичков", создана пользователем Invision, 6 мар 2011.

  1. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    честно перечитал уже много, на практике не могу понять для чего ставится & в функциях..

    Пример:
    PHP:
    1.  
    2. <?php
    3. function func(&$var1, &$var2)
    4. {
    5.     $res = $var1 + $var2;
    6.     $var2 = $var2 * 2;
    7.     $var1 = $var1 * $var2;
    8.     return $res;
    9. }
    10. $a = 3;
    11. $b = 4;
    12. echo func($a, $b); // 7
    13. echo "<br>$a<br>"; // 12
    14. echo "$b"; //8
    15. ?>
    Если убрать & в условии, то будет выдавать просто значение из переменной $a и $b. Собственно интересно почему?) Из за того что каждая переменная уже получила свое значение? =) блин ну не пойму =)
     
  2. ridraider

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

    С нами с:
    23 окт 2010
    Сообщения:
    65
    Симпатии:
    0
    уличная магия
     
  3. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    передача по ссылке.

    обычно внутри функции ты можешь делать с переменными всё что захочешь,
    и это никак не отразится на переменной, которую передали в функцию.

    PHP:
    1. <?php
    2.  
    3. function func_1($var){
    4.   $var = 111111;
    5. }
    6.  
    7. $a = 10;
    8. func_1($a);
    9. echo $a; // 10
    10. ?>

    однако если ты хочешь, чтобы внутри функции менялась переменная,
    которую ты туда передаёшь - делаешь передачу по ссылке.

    PHP:
    1. <?php
    2.  
    3. function func_1(&$var){
    4.   $var = 111111;
    5. }
    6.  
    7. $a = 10;
    8. func_1($a);
    9. echo $a; // 111111
    10. ?>
     
  4. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Вроде бы понял) такое обычно часто используется?
    p.s честно раньше не видел =)
     
  5. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    В данном случае я передаю переменную func_1($a); и если стоит &$var то она меняется внутри функции самой? вообщем тоже самое) я думаю разобрался)))

    спасибо.

    p.s ох уж эти функции =(
     
  6. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в некоторых случаях (я не помню в каких) даже без значка передается по ссылке.

    резонно передавать по ссылке тяжелые вещи типа толстенных массивов.
     
  7. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    объекты точно, насчёт массивов не уверен
     
  8. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Есть еще вопрос =) Например у меня очень часто используется запрос в определенную базу и берется count(), можно ведь написать функцию чтобы в условие добавить определенные данные. Скажем какая таблица, вызвать функцию и получить результат..
     
  9. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
  10. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    ну возможно такое сделать? скажем чтобы не мучать мозг вызвать count_func($dbname, ...);
    к примеру =)