<?php
define('my_const', 100);
echo <<<MYECHO
<p>The value of my_const is {my_const}.</p>
MYECHO;
?>
如果我把大括号内的变量打印出来。但不是恒定的。我该怎么做? 谢谢!将常量(不可变)插入heredoc?
<?php
define('my_const', 100);
echo <<<MYECHO
<p>The value of my_const is {my_const}.</p>
MYECHO;
?>
如果我把大括号内的变量打印出来。但不是恒定的。我该怎么做? 谢谢!将常量(不可变)插入heredoc?
我知道,这已经已经回答了,但你也可以通过常量的值赋值给一个变量解决这个问题。
我个人是这么做的,因为如果你的字符串中有很多常量,那么你的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;
如果我要在变量中保存值,那么为什么首先要定义常量呢? – FatalError 2018-03-01 15:04:09
把你定义的变量为简单的变量和使用它包括在定界符就像在下面的例子:
<?php
define('my_const', 100);
$variable = my_const;
echo <<<MYECHO
<p>The value of my_const is {$variable}.</p>
MYECHO;
?>
这与@ Lukey的回答是一样的,不会添加任何内容 – chiliNUT 2014-11-20 22:06:46
这比@ Lukey的答案要简单得多。我认为它增加了简洁的好处。 – 2017-03-16 16:35:17
您还可以使用get_defined_constants功能。它把后面所有当前定义的常量数组中,您可以在您的定界符字符串中使用
// Let's say there is FOO and BAR defined
$const = get_defined_constants();
$meta = <<< EOF
my awesome string with "{$const['FOO']}" and "{$const['BAR']}" constants
EOF;
这通常不是一个好主意,因为列表将会非常大,因为它包含了除了你真正想要的语言核心和扩展之外的所有常量。手动将它们分配给局部变量似乎更清晰。 – FGM 2016-08-28 14:23:48
这里有一个小窍门,让双引号字符串和here文档包含在大括号中的语法,包括常量任意表达式和其他函数调用。它使用一个函数名可以被分配给一个变量,然后称为定界符内的事实:
<?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;
这是一个很棒的伎俩。也适用于插入静态类属性。 – hackel 2017-03-11 01:08:57
非常适合将计算值传递给包含JavaScript脚本的heredoc。起初有点麻烦,因为我忘记在我传递的字符串周围引用 - 杜 – 2018-02-14 21:49:14
可能重复的[定义和定界符(http://stackoverflow.com/questions/8242922/define-and -heredoc) – dsnunez 2014-08-14 12:59:04