За последние 24 часа нас посетили 53100 программистов и 1765 роботов. Сейчас ищут 1195 программистов ...

Как передать переменную из функции

Тема в разделе "PHP для новичков", создана пользователем paqwerty, 19 янв 2012.

  1. paqwerty

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

    С нами с:
    2 мар 2007
    Сообщения:
    121
    Симпатии:
    0
    Всем доброго времени суток!

    Т.к. я новичок в пхп, то обращаюсь к вам за помощью:

    У меня есть пользовательская функция

    Код (Text):
    1. <?php
    2. function f1($f) {
    3.    $q = mysql_query("SELECT categoryID, name FROM table WHERE categoryID NOT IN (127, 151, 285, 268, 265, 1)");
    4.       while ($row = mysql_fetch_array($q)) {
    5.          if ($row[0] > 15) {
    6.             echo "<h4>".$row[1]."</h4>";
    7.             $z["second"] = $row[1];
    8.          }
    9.          else {
    10.             echo "<h1>".$row[1]."</h1>";
    11.             $z["first"] = $row[1];
    12.          }
    13.       }
    14.       foreach ($z["first"] as $k => $v) {
    15.          echo $k." - ".$v."<br>";
    16.       }
    17. }
    18. ?>
    Как мне передать $z["first"] и $z["second"] из функции в общую область видимости или другую функцию???

    Заранее спасибо...
     
  2. virus-07

    virus-07 Активный пользователь

    С нами с:
    9 май 2011
    Сообщения:
    37
    Симпатии:
    0
    $answer[1] = $z["first"];
    $answer[2] = $z["second"];
    return $answer;

    Ну, и вызываете тогда:
    $some = f1($f);

    Теперь в $some у вас $answer придет.
     
  3. paqwerty

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

    С нами с:
    2 мар 2007
    Сообщения:
    121
    Симпатии:
    0
    virus-07 спасибо что помогаешь.

    Все работает, я еще допер чере global. Но когда в этой функции есть еще например, fputs, то мне выводит помимо нужного результата еще много ошибок ругаясь на этот fputs. Что не так?

    Код (Text):
    1. <?php
    2. function f1($f) {
    3.    $q = mysql_query("SELECT categoryID, name FROM table WHERE categoryID NOT IN (127, 151, 285, 268, 265, 1)");
    4.       while ($row = mysql_fetch_array($q)) {
    5.          if ($row[0] > 15) {
    6.             fputs($f,"<h4>".$row[0]."-".$row[1]."</h4>\n");
    7.             $z["second"] = $row[1];
    8.          }
    9.          else {
    10.             fputs($f,"<h1>".$row[0]."-".$row[1]."</h1>\n");
    11.             $z["first"] = $row[1];
    12.          }
    13.       }
    14.       foreach ($z["first"] as $k => $v) {
    15.          echo $k." - ".$v."<br>";
    16.       }
    17.       $answer[1] = $z["first"];
    18.       $answer[2] = $z["second"];
    19. }
    20. $some = f1($f);
    21. ?>
     
  4. virus-07

    virus-07 Активный пользователь

    С нами с:
    9 май 2011
    Сообщения:
    37
    Симпатии:
    0
    По-порядку:
    1) global - зло. используйте как можно реже, если не можете отказаться.
    2) конкретно в данном примере можете не передавать значение в массив $answer. Я для примера вам писал. Просто возвращайте $z, если массив инициализируется в функции или ничего не возвращайте, а обращайтесь как массиву откуда удобно, если он инициализирован заранее.
    3) признаться, не пользовался никогда fputs. но учитывая, что она пишет что-то в файл, а вы собираетесь туда запихнуть заголовок — вы формируете html. сомнительные действия, признаться =).
    Что пишет когда ругается? Читайте, переводите, исправляйте )
     
  5. paqwerty

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

    С нами с:
    2 мар 2007
    Сообщения:
    121
    Симпатии:
    0
    про $answer я понял...

    кусок кода который привел в пример, это только для примера, но структура кода подобная.
    У меня просто в этой функции выолняется запрос к бд и выборка данных, запись некоторых данных в файл. В другой функции тоже запрос с выборкой к бд и запись других данных в этот же файл. Но проблема в том что мне в функции 2 нужны значения определенной переменной из функции 1.

    Когда я обращаюсь к этой переменной за пределами функции 1, то мне помимо этой переменной происходит обработка всего кода из этой же функции 1 во второй раз, а мне нужна из этой функции только переменная со значением. Поэтому он мне пишет что fputs возвращает пустой рез-т, т.к. код обрабатывается во второй раз.

    А заголовки и html это я для примера привел...
     
  6. virus-07

    virus-07 Активный пользователь

    С нами с:
    9 май 2011
    Сообщения:
    37
    Симпатии:
    0
    ***Но проблема в том что мне в функции 2 нужны значения определенной переменной из функции 1.***

    Вынесите переменную из функций.
    т.е.
    $used_by_two_fanctions = array(); // ну, или строка.
    function one(){}
    function two(){}

    Пробежались первой функцией, записали нужное, пробежались второй — прочитали.
    Или вызывайте вторую функцию из первой, передавая параметр.
     
  7. paqwerty

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

    С нами с:
    2 мар 2007
    Сообщения:
    121
    Симпатии:
    0
    Т.к. я новичок, то я не совсем понимаю...

    Объясни пожалуйста, если есть одна функция в которой выполняется например 2 зароса к бд

    Код (Text):
    1. {?php
    2. function f1() {
    3.    запрос 1;
    4.    запрос 2;
    5. }
    6. ?>
    если я вызаву эту функцию, то выполнится обязательно оба запроса.

    А если я хочу, чтобы вызывая эту функцию выполнялся только один запрос, например второй, как это сделать? Или такое нереально и надо тогда делать функция 1 {запрос 1}, функция 2 {запрос 2} и вызывать нужную.
     
  8. asokol

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

    С нами с:
    17 янв 2012
    Сообщения:
    162
    Симпатии:
    0
    Если первый запрос не сгенерирует ошибку, которая остановит выполнение, то да - выполнятся оба запроса.
    Чтобы вызывался только второй запрос, надо убрать первый. :) Например, так:
    Код (Text):
    1. function f1($query=1) {
    2.     if ($query == 1) запрос 1;
    3.     else запрос 2;
    4. }
    5. f1('Выполни-ка второй запрос!');
    А для того, чтобы вытащить какое-то значение из функции, но не через return, надо передавать параметр по ссылке:
    http://www.php.net/manual/en/functions.arguments.php
     
  9. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    можно возвращать массив
     
  10. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Код (Text):
    1.  
    2. function fn(&$z = null) {
    3.      $z = 1;
    4. }
    5. fn($my_var);
    6. echo $my_var;