为什么 class 常量值在一个语句中而不是在另一个语句中被计算?
Why the class constant value is getting evaluated in one statement and not in other?
我正在使用 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}
?>
在上面的语句中,在第一个 echo 语句中 class 常量 softdrink
的值被评估为字符串 'rootbeer' 其中转一个包含字符串'A & W'的变量名。打印值 'A & W'。
在第二个 echo 语句中,我只想显示 class 常量 softdrink
中的值,即字符串 'rootbeer'。
但是我做不到。请在这方面帮助我。
P.S。 : 请不要让我使用字符串连接来实现输出。我只想通过在 双引号字符串 .
中使用 class 常量来实现输出
这样做 -
echo "I'd like an ". beers::softdrink ."\n";
你可以使用 printf -
printf("I'd like an %s\n", beers::softdrink);
据我所知,这是不可能的。字符串中的整个 "variable parsing" (扩展的卷曲语法)都是基于变量完成的。变量总是以 $ 符号开头,所以不以 $ 开头似乎不起作用。 (即不能使用不是变量(的一部分)的所有内容。)。
简化示例(不起作用):
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) 常量:
class beers {
const softdrink = 'rootbeer';
}
function foobar($test) {
$GLOBALS[$test] = $test;
return $test;
}
echo "I'd like an {${foobar(beers::softdrink)}}\n";
这与我推荐的相去甚远!!!
我正在使用 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}
?>
在上面的语句中,在第一个 echo 语句中 class 常量 softdrink
的值被评估为字符串 'rootbeer' 其中转一个包含字符串'A & W'的变量名。打印值 'A & W'。
在第二个 echo 语句中,我只想显示 class 常量 softdrink
中的值,即字符串 'rootbeer'。
但是我做不到。请在这方面帮助我。
P.S。 : 请不要让我使用字符串连接来实现输出。我只想通过在 双引号字符串 .
中使用 class 常量来实现输出这样做 -
echo "I'd like an ". beers::softdrink ."\n";
你可以使用 printf -
printf("I'd like an %s\n", beers::softdrink);
据我所知,这是不可能的。字符串中的整个 "variable parsing" (扩展的卷曲语法)都是基于变量完成的。变量总是以 $ 符号开头,所以不以 $ 开头似乎不起作用。 (即不能使用不是变量(的一部分)的所有内容。)。
简化示例(不起作用):
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) 常量:
class beers {
const softdrink = 'rootbeer';
}
function foobar($test) {
$GLOBALS[$test] = $test;
return $test;
}
echo "I'd like an {${foobar(beers::softdrink)}}\n";
这与我推荐的相去甚远!!!