我正在使用 PHP 7.2.6
我尝试了以下程序:
<?php
class beers {
const softdrink = 'rootbeer';
}
$rootbeer = 'A & W';
echo "I'd like an {${beers::softdrink}}\n"; //Output : I'd like an A & W
echo "I'd like an {beers::softdrink}\n"; //Output : I'd like an {beers::softdrink}
?>
在上面的语句中,在类常量softdrink
的第一个echo语句中,值被评估为字符串'rootbeer',该变量又包含字符串 “ A&W” 。值'A&W'被打印。
在第二个echo语句中,我只想显示类常量softdrink
中存在的值,该值是字符串'rootbeer'。
但是我做不到。请在这方面帮助我。
P.S。 ::请不要要求我使用字符串串联来实现输出。我只想通过在双引号字符串中使用类常量来实现输出。
答案 0 :(得分:1)
Afaik,这不可能。字符串中的整个“变量解析”(扩展的卷曲语法)是基于变量完成的。变量始终以$符号开头,因此不以$开头似乎不起作用。 (即,不能使用不是变量一部分的所有内容。)
简化示例(不起作用):
const TEST = 'A & W';
echo "I'd like an {TEST}\n";
与函数调用相同(它们也不能直接工作)
$test = ' A & W ';
echo "I'd like an {trim($test)}\n";
仅在“ sub”花括号中可以使用所需的输出,但是必须再次将其解析为变量,这使得它不可能(此时)。
有效吗
$AW = 'A & W';
$test = ' AW ';
echo "I'd like an {${trim($test)}}\n";
编辑:
如果您确实想在复杂的花括号表达式中输出一个(类)常量:
class beers {
const softdrink = 'rootbeer';
}
function foobar($test) {
$GLOBALS[$test] = $test;
return $test;
}
echo "I'd like an {${foobar(beers::softdrink)}}\n";
这远非我建议做的!!
答案 1 :(得分:0)
这样做-
echo "I'd like an ". beers::softdrink ."\n";
答案 2 :(得分:0)
您可以使用printf-
printf("I'd like an %s\n", beers::softdrink);