За последние 24 часа нас посетили 16463 программиста и 1567 роботов. Сейчас ищут 912 программистов ...

вопрос по nowdoc

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

  1. vikrorpert

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

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    есть такой код

    Код (Text):
    1. $confirm = "if (!confirm('".Module::t("Approve") . "?')) return false;";
    2.  
    3. $js_approve =<<< EOD
    4. function() {
    5.     $confirm
    6.     var url = $(this).attr('href');
    7.     $.post(url, function(response) {
    8.         alert(response);
    9.     });
    10.     return false;
    11. }
    12. EOD;
    хочу его переделать в такой
    Код (Text):
    1. $js_approve =<<< EOD
    2.     function() {
    3.         "if (!confirm('".Module::t("Approve") . "?')) return false;";
    4.         var url = $(this).attr('href');
    5.         $.post(url, function(response) {
    6.             alert(response);
    7.         });
    8.         return false;
    9.     }
    10.     EOD;
    но ф-я не вызывается, есть ли решение?
     
  2. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    vikrorpert
    для heredoc-строки есть ограничение, что тег ограничения EOD; всегда должен быть в самом начале строки; пробелы и табуляция недопустимы. это требования языковой конструкции
     
  3. vikrorpert

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

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    ну я спросил про nowdoc-это вроде чтото новое

    а насчет пробела- все работает, вопрос вобще не в этом!
     
  4. Gromo

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

    С нами с:
    24 май 2010
    Сообщения:
    2.786
    Симпатии:
    2
    Адрес:
    Ташкент
    vikrorpert
    конкатенация строки и вызова статического метода класса внутри heredoc-конструкции не сработает.
    можно воспользоваться простой строкой и сделать конкатенацию со статическим методом класса

    тут читаем про heredoc, nowdoc и их отличия:
    http://www.php.net/manual/ru/language.t ... tax.nowdoc
     
  5. vikrorpert

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

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    блин зачем столько воды? у меня в примере указан работающий вариант верхний с конкатенацией уже, не проще сказать что мой рабочий вариант единственно верный и второй вариант работать не будет? и других вариантов нету
     
  6. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Внутри строки нельзя получить значения функции, статического метода и свойства и константы класса.
    Т.е. единственный вариант, это

    $confirm = Module::t("Approve");

    ...
    $js_approve =<<< EOD
    ...
    if (!confirm('{$confirm}?')) return false;
     
  7. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    ЗЫ: и это heredoc
    nowdoc - это аналог строки с одинарными кавычками и вызывается $var = <<<'EOD'