这打印苹果:
define("CONSTANT","apple");
echo CONSTANT;
Run Code Online (Sandbox Code Playgroud)
但这不是:
echo "This is a constant: CONSTANT";
Run Code Online (Sandbox Code Playgroud)
为什么?
Art*_*cto 24
因为"不打印引号内的常量".正确的形式是:
echo "This is a constant: " . CONSTANT;
Run Code Online (Sandbox Code Playgroud)
点是连接运算符.
gre*_*jor 19
define('QUICK', 'slow');
define('FOX', 'fox');
$K = 'strval';
echo "The {$K(QUICK)} brown {$K(FOX)} jumps over the lazy dog's {$K(BACK)}.";
Run Code Online (Sandbox Code Playgroud)
建议将连接作为此处唯一的解决方案,但在使用以下语法时这不起作用:
define("MY_CONSTANT", "some information");
$html = <<< EOS
<p>Some html, **put MY_CONSTANT here**</p>
EOS;
Run Code Online (Sandbox Code Playgroud)
当然,上面只是将文本“MY_CONSTANT”放入$html中。
其他选项包括:
定义一个临时变量来保存常量:
$myConst = MY_CONSTANT;
$html = <<< EOS
<p>Some html, {$myConst} </p>
EOS;
Run Code Online (Sandbox Code Playgroud)如果有很多常量,您可以获取所有常量的数组并使用它:
$constants = get_defined_constants();
$html = <<< EOS
<p>Some html, {$constants["MY_CONSTANT"]} </p>
EOS;
Run Code Online (Sandbox Code Playgroud)当然,在如此简单的示例中,没有理由使用 <<< 运算符,但是对于较长的输出块,上述两个可能比一堆字符串连接更清晰且更容易维护!
这个问题已经得到解答,但我想对此提供更通用的见解。
在双引号中,PHP 会将任何以 a 开头的内容识别$为要插入的变量。此外,它考虑数组和对象访问([]和->),但仅限于单个级别。例如"$foo->bar",插值$foo->bar并$foo->bar->baz执行相同的操作,并按->baz字面意思处理字符串。[]此外,对于字符串键,必须省略中的引号。例如,"$foo[bar]"插值$foo['bar']while"$foo['bar']"是一个语法错误。AFAIK,就是这样。要获得更多功能,您需要"{$...}"语法。
这里$实际上是语法的一部分,没有它就无法工作。例如"{FOO}",不会插入常量FOO,这只是一个语法错误。然而,除了一些奇怪的语法限制之外,这个构造实际上相当强大,可以包含任何有效的 PHP 表达式,只要它以 a 开头$并且是数组访问、对象访问或函数调用。(也许其他一些情况是允许的。如果有人对此有更好的理解,请告诉我。)解决您的问题的最通用的解决方案是在代码库中的某个位置定义类似以下函数的内容:
$id = function ($x) {
return $x;
}
Run Code Online (Sandbox Code Playgroud)
它只是恒等函数——它返回你给它的任何东西。它必须被定义为匿名函数,因此您可以像$id使用$.
现在您可以使用此函数来插入任何 PHP 表达式:
echo "{$id(CONSTANTS)}"
echo "{$id($some + $operators - $as . $well)}"
// etc...
Run Code Online (Sandbox Code Playgroud)
PHP 版本 < 5.3 的替代方案,您不能使用匿名函数:
class Util {
function id ($x) { return $x; }
}
$u = new Util;
echo "{$u->id(ANY + $expression . $here)}"
// or...
function id ($x) { return $x; };
$id = 'id';
echo "{$id(ANY + $expression . $here)}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10837 次 |
| 最近记录: |