Подтвердить что ты не робот

Интерполировать константу (не переменную) в heredoc?

<?php
   define('my_const', 100);
   echo <<<MYECHO
      <p>The value of my_const is {my_const}.</p>
MYECHO;
?>

Если я поместил переменную внутри фигурных скобок, она будет распечатана. Но не константа. Как мне это сделать? Спасибо'S!

4b9b3361

Ответ 1

Используйте sprintf()

define('my_const', 100);
$string = <<< heredoc
      <p>The value of my_const is %s.</p>
heredoc;

$string = sprintf($string, my_const);

Ответ 2

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

Лично я делаю так, потому что, если у вас много констант в вашей строке, ваш вызов sprintf может быть довольно запутанным. Затем также сложнее сканировать строку и посмотреть, что делает. Кроме того, назначая переменные по отдельности, вы можете видеть, что принимает какое значение.

Пример:

$const = CONST;
$variable = VARIABLE;
$foo = (new Foo)->setFooProperty(12)->getFooProperty();
$bar = (123 - 456) * 10;
$ten = 1 + 2 + 1 + (5 - 4);
<<<EOD
Lorem ipsum dolor sit amet, **$variable** adipiscing elit. 
Duis gravida aliquet dolor quis gravida. 
Nullam viverra urna a velit laoreet, et ultrices purus condimentum. 
Ut risus tortor, facilisis sed porta eget, semper a augue. 
Sed adipiscing erat non sapien commodo volutpat. 
Vestibulum nec lectus sed elit dictum accumsan vel adipiscing libero. 
**$const** vehicula molestie sapien. 
Ut fermentum quis risus ut pellentesque.
Proin in dignissim erat, eget molestie lorem. Mauris pretium aliquam eleifend.
**$foo** vitae sagittis dolor, quis sollicitudin leo. 
Etiam congue odio sit amet sodales aliquet. 
Etiam elementum auctor tellus, quis pharetra leo congue at. Maecenas sit amet ultricies neque. 
Nulla luctus enim libero, eget elementum tellus suscipit eu. 
Suspendisse tincidunt arcu at arcu molestie, a consequat velit elementum. 
Ut et libero purus. Sed et magna vel elit luctus rhoncus. 
Praesent dapibus consectetur tortor, vel **$bar** mauris ultrices id. 
Mauris pulvinar nulla vitae ligula iaculis ornare. 
Praesent posuere scelerisque ligula, id tincidunt metus sodales congue. 
Curabitur lectus urna, porta sed molestie ut, mollis vitae libero. 
Vivamus vulputate congue **$ten**.
EOD;

Ответ 3

Вот небольшой трюк, позволяющий строкам с двойными кавычками и heredocs содержать произвольные выражения в синтаксисе фигурных скобок, включая константы и другие вызовы функций. Он использует тот факт, что имя функции может быть назначено переменной, а затем вызвано внутри heredoc:

<?php

// Declare a simple function
function _placeholder($val) { return $val; }
// and assign it to something short and sweet
$_ = '_placeholder';

// or optionally for php version >= 5.3
// Use a closure (anomynous function) like so:
$_ = function ($val){return $val;};

// Our test values
define('abc', 'def');
define('ghi', 3);

$a=1;
$b=2;

function add($a, $b) { return $a+$b; }

// Usage
echo "b4 {$_(1+2)} after\n"; // outputs 'b4 3 after'
echo "b4 {$_(abc)} after\n"; // outputs 'b4 def after'
echo "b4 {$_(add($a, $b)+ghi*2)} after\n"; // outputs 'b4 9 after'
$text = <<<MYEND

Now the same in heredoc:
b4 {$_(1+2)} after
b4 {$_(abc)} after
b4 {$_(add($a, $b)+ghi*2)} after

MYEND;
echo $text;

Ответ 4

Вы также можете использовать get_defined_constants. Он возвращает все текущие определенные константы в массиве, которые вы можете использовать в своей строке HEREDOC

// Let say there is FOO and BAR defined
$const = get_defined_constants();

$meta = <<< EOF
     my awesome string with "{$const['FOO']}" and "{$const['BAR']}" constants
EOF;

Ответ 5

Поместите вашу определенную переменную в простую переменную и используйте ее в heredoc так же, как в следующем примере:

<?php
define('my_const', 100);
$variable = my_const;
   echo <<<MYECHO
      <p>The value of my_const is {$variable}.</p>
MYECHO;
?>