За последние 24 часа нас посетили 30908 программистов и 1446 роботов. Сейчас ищут 824 программиста ...

Можно ли использовать такие переменные?

Тема в разделе "PHP для новичков", создана пользователем Mark32, 28 сен 2014.

  1. Mark32

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

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    У меня есть необходимость использовать такие переменные:
    Код (Text):
    1.  $var[$item[DEFINED_VAR.'_name']]
    Всё прекрасно работает, но в мануале php написано, что обязательно нужно использовать одинарные кавычки в подобных переменных, т.е. $var['var'] правда так и не особо понял почему, не очень силён в английском (можете кстати объяснить почему нужны одинарные кавычки?), но всё же, нужно ли в моём случае использовать кавычки, и если да, то как?
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    вроде всё верно. одинарные отличаются от двойных, да.
     
  3. Mark32

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

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    т.е. так правильно использовать?
    Код (Text):
    1. $var[$item[DEFINED_VAR.'_name']]
    И можете объяснить почему нужны одинарные кавычки? выходит что в моей конструкции их нет, как их туда поставить?
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    они не нужны. они отличаются от двойных. а какие нужны и что правильно - это надо решать по ситуации.
     
  5. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Одинарные двойные кавычки нужны что бы пхп понял что это не переменная не константа а именно индекс для массива.
    ,
    Пхп ищет массвив который находится в $item и имеет индекс который получается конкатенацией константы DEFINED_VAR с строкой '_name'
     
  6. Mark32

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

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    ok понял, спасибо!
     
  7. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    =) ну ты объяснил
    массив или не массив
     
  8. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Пардон, сам прочитал и ужаснулся...
    Плохо получилось. Главное он понял.
     
  9. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    =) да. Студентам порой приходится столько раз объяснять, что уже сам поймёшь, а он всё не понял. :D
     
  10. Mark32

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

    С нами с:
    15 июн 2008
    Сообщения:
    539
    Симпатии:
    2
    Просто в
    Код (Text):
    1. $var[$item[DEFINED_VAR.'_name']]
    одинарные кавычки не заключишь, т.е. ГРУБО (схематично) говоря так:

    Код (Text):
    1. $var[ ' $item[DEFINED_VAR.'_name'] ' ]
    Вспомнил откуда родился вопрос, нашёл на русском на php.net:

    Код (Text):
    1. $foo[bar] = 'враг';
    2. echo $foo[bar];
    Это неверно, хотя и работает. Причина в том, что этот код содержит неопределенную константу (bar), а не строку ('bar' - обратите внимание на кавычки), и PHP в будущем может определить константу, которая, к несчастью для вашего кода, будет иметь то же самое имя. Это работает, потому что PHP автоматически преобразует "голую строку" (не заключенную в кавычки строку, которая не соответствует ни одному из известных символов языка) в строку, со значением этой "голой строки". Например, если константа с именем bar не определена, то PHP заменит bar на строку 'bar' и использует ее.
     
  11. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Строки должны быть в кавычках. Иначе это не строки
     
  12. Хыиуду

    Хыиуду Активный пользователь

    С нами с:
    3 июн 2014
    Сообщения:
    618
    Симпатии:
    5
    Ну, это может спасать, если знаешь, что такую константу в php вряд ли когда введут.
    echo "data[ololo] = $data[ololo], ahaha";
     
  13. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Не знаю, много раз делал так:
    <?php
    $a = array ();
    $a["one"] = 1;
    echo $a["one"];
    ?>
    и всё работало. Там нужны просто кавычки, любые, чтоб php понял, что это строка, а не именованная константа. Т.е. если написать $a[one], php будет искать константу с именем one, не найдёт, выдаст матное слово, и использует строку "оne" в качестве индекса.