Разрешено ли мне помещать строки синтаксиса heredoc в одинарных, двойных кавычках или nowdoc непосредственно в параметр функций, который использует строку?

#php

#php

Вопрос:

Разрешено ли мне помещать строки синтаксиса heredoc в одинарных кавычках, в двойных кавычках или nowdoc непосредственно в функции, для параметров которых требуется строка, например, strlen('string text') или strlen("some more string text") вместо включения переменной, например strlen($str); ?

Если нет, то почему?

Комментарии:

1. Я пробовал nowdoc и herdoc, но безуспешно.

2. heredoc работает без проблем, хотя это немного сложно (и нечитаемо), т. Е. если вы начинаете его с <<<STRING , вы не можете закончить его с STRING); или STRING, $otherParam . Вы также не можете ставить пробел перед STRING . Смотрите пример lonesomeday, он работает так, как ожидалось.

3. Хотя для этого нет причин, это добавляет ненужный вызов функции, потому что результат будет одинаковым каждый раз.

4. @gnur, подумай еще раз 😉 Строка может содержать переменные с непостоянными значениями, а также strlen() может быть приведена только для иллюстрации, т.Е. в действительности могут использоваться другие функции.

Ответ №1:

Вам разрешено это делать, если функция не ожидает, что строковая переменная будет передана по ссылке:

 // 'amp;' means that argument is passed by reference
function requestStringAsVariable(amp;$str) {
    $str = '*' . $str . '*';
}

$str = 'test';
requestStringAsVariable($str);
echo $str; // outputs '*test*';

requestStringAsVariable('foo'); // won't work, as function expects variable
  

Ответ №2:

Да, вы можете использовать любой синтаксис для создания строк.

Однако обратите внимание, что вы должны быть осторожны при использовании синтаксиса heredoc / nowdoc с вызовами функций: последняя строка строки не может содержать ничего, кроме идентификатора:

 var_dump(<<<HERE
foo
HERE
);
  

Ответ №3:

ДА. Вы можете. Вам не нужно хранить его в переменной