За последние 24 часа нас посетили 55569 программистов и 1797 роботов. Сейчас ищет 771 программист ...

переменнные в функциях

Тема в разделе "PHP для новичков", создана пользователем Alexus, 1 май 2018.

  1. Alexus

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

    С нами с:
    1 май 2018
    Сообщения:
    64
    Симпатии:
    2
    Привет всем) проблема банальна и проста для знающих, а для незнающих такой фарш, как у меня ) не получается вывести значение переменной $color, в элементе bgcolor на выходе, значение переменной не переносится, обозначить $color как global не помогает, вот пример кода:
    PHP:
    1. <!DOCTYPE HTML>
    2. <?php
    3. function DrawTable($cols,$rows,$color)
    4.    {
    5.    for ($c=1;$c<=$cols;$c++)
    6.      {
    7.      print "<tr>"."\n";
    8.    for ($r=1;$r<=$rows;$r++)
    9.    {
    10.      print "<td>".$c*$r."</td>"."\n";
    11.    }
    12.      print "</tr>";
    13.      }
    14.    }
    15.  
    16. ?>
    17. <table border="1" bgcolor="<?="$color";?>">
    18. <?php echo DrawTable(7,9,"green");
    19. ?>
    20. </table>
     
    #1 Alexus, 1 май 2018
    Последнее редактирование модератором: 1 май 2018
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    с чего ты взял, что не "переносится"? как проверял? где у тебя внутри функции она используется?
     
  3. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    математические расчеты / действия с переменными, заключай в скобочки
    --- Добавлено ---
    какую фантастику ночью смотрел ?
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    хамишь =)
     
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.818
    Симпатии:
    1.333
    Адрес:
    Лень
    у самого то карма... учить плохому... бесплатно!
     
  6. Alexus

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

    С нами с:
    1 май 2018
    Сообщения:
    64
    Симпатии:
    2
    проверял
    1. переменной &color присваивал значение по умолчанию &color="green".. любой цвет..
    2. писал в теле функции global &color и присваивал значение;

    Я на самом деле просто хотел сделать ее глобальной, указать значение и втупую перенести это значение в элемент bgcolor.. но при компиляции почему то значение элемента вообще не выдается..

    Не это что получается я должен этому элементу приписать массив и в этот массив перечислением все возможные значения цвета указать, чтоб потом на них ссылаться в функции? А по проще способа нет никакого? )
     
  7. Alexus

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

    С нами с:
    1 май 2018
    Сообщения:
    64
    Симпатии:
    2
    Вся проблема в том, что я не могу вывести переменную $color за пределы функции
     
  8. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    зачем?
     
  9. AlexandrS

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

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    А в чем смысл переменной $color если она в функции не используется?

    PHP:
    1. <!DOCTYPE HTML>
    2. <?php
    3. function DrawTable($cols,$rows,$color)
    4.    {
    5.    for ($c=1;$c<=$cols;$c++)
    6.      {
    7.      print "<tr>"."\n";
    8.    for ($r=1;$r<=$rows;$r++)
    9.    {
    10.      print "<td>".$c*$r."</td>"."\n";
    11.    }
    12.      print "</tr>";
    13.      }
    14.    }
    15. ?>
    16. <?php $color='green'; ?>
    17. <table border="1" bgcolor="<?="$color";?>">
    18. <?php echo DrawTable(7,9,$color);
    19. ?>
    20. </table>
    Объяви переменную $color чуть выше, чем ты ее вызываешь и всё. Кроме этого, если тебе так хочется воткнуть ее в функцию, пропиши ее, как $color а не значением и всё, хотя как уже писали выше и я тоже на это обратил внимание, она, эта переменная $color в функции не используется.
    Кроме этого давать функции имя с верхнего регистра - моветон! :)
     
    #9 AlexandrS, 1 май 2018
    Последнее редактирование: 1 май 2018
  10. lastdays

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

    С нами с:
    27 сен 2012
    Сообщения:
    410
    Симпатии:
    74
    Человек отправляет в функцию данные, а хочет их получить вне функции, чего тут ещё советовать? логику включи.
     
  11. AlexandrS

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

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Я извиняюсь, а о какой логике речь?
    Если я не ошибаюсь, то JS может применять свойство после загрузки DOM, вот пусть в функции прописывает JS со стилем в который этот $color и будет передаваться.
    Пардоньте, возможно это чушь, но если основываться на той логике к которой вы призываете, то тут это будет уместно!
    Кроме всего этого, как я подразумеваю, функцию пишут не для разового использования, а значит данные передающие ей, будет откуда-то приходить, а значит теряется весь смысл использования $color в функции, чтоб потом пытаться эту переменную вызвать из самой функции. Т.е. вполне логично, если значения передающиеся в функцию, $col, $row, $color будут объявляться выше, а значит участие $color в функции просто вне всякой логики.
     
    #11 AlexandrS, 1 май 2018
    Последнее редактирование: 1 май 2018
  12. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    да не
    логика про то, что зачем пихать в функцию то, что внутри функции не нужно
     
  13. Alexus

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

    С нами с:
    1 май 2018
    Сообщения:
    64
    Симпатии:
    2
    В общем из написанного я заключил, что выводить какие-либо значения переменных за пределы функций в php не предусмотрено, даже придавая этой переменной статус global, к тому же это не этично. На тех уроках, которые мы проходили, такое просто имело место быть и я в данном случае хотел повторить это для примера и избежания сложностей. Я вообще бы не парился, и мне кажется сама постановка такого вопроса неуместной, зачем javascript? если можно втупую передать значение bgcolor с помощью css..
     
  14. Alexus

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

    С нами с:
    1 май 2018
    Сообщения:
    64
    Симпатии:
    2
    Решил проблему таким путем выглядит громоздко и несуразно:
    PHP:
    1. <!DOCTYPE HTML>
    2. <?php
    3. function DrawTable($cols,$rows,$color)
    4. {  
    5.    switch ($color) {
    6.      case 'blue':
    7.        echo "<table border='1' bgcolor='blue'</table>";
    8.        break;
    9.      case 'green':
    10.        echo "<table border='1' bgcolor='green'</table>";
    11.        break;
    12.      default:
    13.        echo "<table border='1' bgcolor='red'</table>";
    14.        break;
    15.    }
    16.    for ($c=1;$c<=$cols;$c++)
    17.      {
    18.      print "<tr>"."\n";
    19.    for ($r=1;$r<=$rows;$r++)
    20.    {
    21.      print "<td>".$c*$r."</td>"."\n";
    22.    }
    23.      print "</tr>"."\n";
    24.    }
    25. }
    26.    echo DrawTable(7,9,"blue");
     
    #14 Alexus, 2 май 2018
    Последнее редактирование модератором: 2 май 2018
    igordata нравится это.
  15. Taktreba

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

    С нами с:
    11 янв 2017
    Сообщения:
    543
    Симпатии:
    132
    @igordata , а замыкания нет? если он так хочет... )
     
  16. AlexandrS

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

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Тогда задам тебе вопрос, а зачем тогда писать функцию, когда можно "втупую" написать это протседуркой без использования функции?!
    Раз уж ты решил использовать $color в функции, где она там не разу не встречается, я тебе предложил использовать JS, если т.е. ты сможешь динамически менять цвет, а если прописать это в css стиле формата style='' то это будет нижем чем вызов, соответственно результата не будет, а если это прописать в сам файл css то это уже будет статика, а не динамика. А применение JS подразумевало использование после загрузки всего DOM.

    PHP:
    1. function DrawTable($cols,$rows,$color="red"){
    2. }

    PHP:
    1. $table= "<table border='1' bgcolor='".$color."'</table>";
    2. switch ($color) {
    3.      case 'blue':
    4.        echo $table;
    5.        break;
    6.      case 'green':
    7.        echo $table;
    8.        break;
    9.      default:
    10.        echo $table;
    11.        break;
    12.    }
    возможно в синтаксисе есть ошибка, не проверял, но логика такова, что ты несколько раз используешь одно и тоже, и если вдруг придется что-то менять, то лучше помять что-то в одной переменной, чем менять это в нескольких местах, а если цветов будет не 3 а 23? Возрастает вероятность ошибки.
    И кроме всего прочего у тебя тэг table остается не закрыт
    --- Добавлено ---
    Хотя накой там вообще switch?
    PHP:
    1. function DrawTable($cols,$rows,$color="red")
    2. {
    3.    echo "<table border='1' bgcolor='".$color."'>";
    4.    for ($c=1;$c<=$cols;$c++)
    5.      {
    6.      print "<tr>"."\n";
    7.    for ($r=1;$r<=$rows;$r++)
    8.    {
    9.      print "<td>".$c*$r."</td>"."\n";
    10.    }
    11.      print "</tr>"."\n";
    12.    }
    13.    echo "</table>";
    14. }
    Так разве не будет работать?
     
  17. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    надо было понять, что он хочет, а то было не понятно
    теперь понятно и я считаю реализацию со свичкейсами вполне неплохой
     
  18. AlexandrS

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

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    Хотя накой там вообще swith
    А зачем она там вообще нужна?
     
  19. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    для дефолтного варианта
    --- Добавлено ---
    PHP:
    1. function DrawTable($cols, $rows, $color = "red") {
    2.     echo "<table border='1' bgcolor='$color'>\n";
    3.     for ($c = 1; $c <= $cols; $c++) {
    4.         echo "<tr>\n";
    5.         for ($r = 1; $r <= $rows; $r++) {
    6.             echo "<td>[$c, $r]</td>\n";
    7.         }
    8.         echo "</tr>\n";
    9.     }
    10.     echo "</table>\n";
    11. }
    12.  
    13. echo DrawTable(12, 5);
    14. echo DrawTable(7, 9, "blue");
     
  20. AlexandrS

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

    С нами с:
    30 сен 2017
    Сообщения:
    659
    Симпатии:
    103
    Адрес:
    Краснодар
    По сути тоже самое что у меня чуть выше :) только чутка подправлено, но то на работоспособность не влияет. :)
     
  21. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ага. просто я подформатировал для красоты.
     
  22. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Похоже на ДЗ из Специалиста
     
  23. Alexus

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

    С нами с:
    1 май 2018
    Сообщения:
    64
    Симпатии:
    2
    Спасибо начинаю вкуривать ) на счет ДЗ похоже)), я просто свой сайт делаю а базу брать откуда то приходится )