在字符串中包含常量而不需要连接。

199

在PHP中,是否有一种方法可以将常量包含在字符串中,而无需进行连接操作?

define('MY_CONSTANT', 42);

echo "This is my constant: MY_CONSTANT";

19
我的直觉告诉我,“这是我的常量:{MY_CONSTANT}”应该可以工作。但实际上并不行。我在这里只是提醒其他人不要和我有相同的想法。 - Mikael Lindqvist
15个回答

1

虽然我来晚了,但是如果你不喜欢(s)printf,这里有我的解决方案:

// Can of course be replaced with the const syntax
define("FOO", "bar");
$replace_pairs = ["%myConstant" => FOO];
// Output : "My constant : bar"
echo strtr("My constant : %myConstant", $replace_pairs);

0

有趣的是你可以使用关键字“const”作为函数名称,以防止命名空间混乱:

define("FOO","foo");
${'const'} = function($a){return $a;};
echo "{$const(FOO)}"; // Prints "foo"
echo const(FOO); // Parse error: syntax error, unexpected T_CONST

你也可以使用 $GLOBALS 在整个代码中传播 'const' 函数:

$GLOBALS['const'] = function($a){return $a;};

不确定是否安全用于未来。更糟糕的是,它仍然看起来很丑陋。


0

我经常需要在编写脚本时打印新行字符。

从浏览器运行脚本时,换行应为<br>,而从终端执行时应为PHP_EOL

所以,我会这样做:

$isCLI = ( php_sapi_name() == 'cli' );
$eol = $isCLI ? PHP_EOL : '<br>'; 
echo "${eol} This is going to be printed in a new line";

0

这是一个老问题,但对于那些在搜索的人来说,这是另一种解决方法

<?php
define( 'MY_CONSTANT', 'world' );

echo "Hello {${$constant = 'constant'}('MY_CONSTANT')}";

哎呀,虽然它能用,但并不优雅或直观。不过,你展示了可能性,工作做得不错。 - undefined

-4

我相信这回答了原帖的问题。唯一的问题是全局索引键似乎只能用小写字母。

define('DB_USER','root');
echo "DB_USER=$GLOBALS[db_user]";

输出:

DB_USER=root

1
这似乎不起作用(即使您连续使用大写字母)。$GLOBALS是一个关联数组,包含对所有变量的引用。 - alephreish
这个回答是错误的。唯一可能产生该输出的方式是如果您的脚本中也有 $db_user = 'root'; - Jeff Puckett

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接