Как я могу сохранить PHP-код внутри переменной ‘heredoc’?

#php

#php

Вопрос:

Я хотел бы сохранить следующий код внутри переменной HEREDOC:

 <?php
    $var = 'test';
    echo $var;
?>
  

вот так:

 $hered = <<<HERED
<?php
    $var = 'test';
    echo $var;
?>
HERED;
  

Проблема в том, что HEREDOC работает как двойные кавычки, "" — это означает, что каждый знак доллара ( $ ) должен быть заменен на $

Есть ли способ использовать HEREDOC без выполнения такой операции?

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

1. Вопрос должен быть: почему вы хотите это сделать? То, что вы здесь делаете, для меня похоже на запах кода.

2. Если вы делаете это eval позже: пожалуйста, не делайте!

Ответ №1:

Да, есть. Ознакомьтесь с синтаксисом nowdoc:

 $hello = 'hey';
$echo <<<'EOS'
$hello world!
EOS;
//Output: $hello world
  

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

1. Срок службы PHP 5.2 истек 2,5 года назад. С тех пор больше нет обновлений безопасности для старых версий PHP, поэтому всем, кто все еще использует PHP до версии 5.3, следует запланировать обновление как можно скорее.

2. Но как это сделать с heredoc?

3. @simPod зачем тебе это? Из документов: Nowdocs are to single-quoted strings what heredocs are to double-quoted strings. A nowdoc is specified similarly to a heredoc, but no parsing is done inside a nowdoc. The construct is ideal for embedding PHP code or other large blocks of text without the need for escaping. php.net/manual/en /…

4. @Xatenev потому что вам может потребоваться частично выполнить синтаксический анализ, поэтому вам нужен heredoc.

5. @simPod Звучит так, как будто вам нужен движок шаблонов.

Ответ №2:

Это можно сделать с помощью :

 echo <<<HEREDOC
<?php
    $var = 'test';
    echo $var;
?>
HEREDOC;
  

Я знаю, что теперь есть doc, но, например, моему текущему варианту использования нужен heredoc, потому что некоторые доллары нужно экранировать, а некоторые нет:

 $variableNotToEscape = 'this should be output';
echo <<<HEREDOC
$variableNotToEscape
$variableNotToEscape
HEREDOC;
  

Которая возвращает

 this should be output
$variableNotToEscape