我对the manual的读取(在字符串“字符串访问和字符修改”之前的位置)是你可以在字符串中使用类常量和{}做一些花哨的技巧但你不能做一个简单的事情,使这个方法回报真相:
class c {
const k = '12';
public function s() {
return "Twelve in decimal is {c::k}.";
}
}
这里是正确的解决方案吗?
答案 0 :(得分:10)
这里是正确的解决方案吗?
是。扩展的卷曲语法不支持它。
或者,您可以将常量列表导出到数组并使用它(或将常量导出到单个标量变量名称),但这不是一个很好的解决方案IMO。
请注意,常量可用,您可以这样做:
const k = 'foo';
$foo = 'bar';
echo "{${c::k}}"
给你bar
,但这不是你想要的。
答案 1 :(得分:7)
这有点神秘,但手册中有一个注释。
自PHP 5起,{$}内的函数,方法调用,静态类变量和类常量工作。但是,访问的值将被解释为定义字符串的作用域中变量的名称。使用单个花括号({})将无法访问函数或方法的返回值或类常量或静态类变量的值。
最后一句话告诉你它不会工作所以是的,连接就是这里的方式。
(已修改)上段示例:
<?php
class beers {
const softdrink = 'rootbeer';
}
$rootbeer = 'A & W';
// This works; outputs: I'd like an A & W
echo "I'd like an {${beers::softdrink}}\n";
// This won't work; outputs: I'd like an {beers::softdrink}
echo "I'd like an {beers::softdrink}\n";
答案 2 :(得分:5)
卷曲语法仅适用于“变量表达式”。您需要使用 {$
来访问任何内容。
哦,只有解决方法:
$c = "constant";
return "Twelve in decimal is {$c('c::k')}.";
这显然不比仅使用字符串连接更短或更易读。