PHP 中字符串中的类常量
我对手册的阅读(标题为“字符串访问和字符修改”的部分之前的位)是,您可以使用字符串中的类常量和{}做一些花哨的技巧,但您不能做一些简单的事情,使此方法返回真相:
class c {
const k = '12';
public function s() {
return "Twelve in decimal is {c::k}.";
}
}
这里是正确的解决方案吗?
我对手册的阅读(标题为“字符串访问和字符修改”的部分之前的位)是,您可以使用字符串中的类常量和{}做一些花哨的技巧,但您不能做一些简单的事情,使此方法返回真相:
class c {
const k = '12';
public function s() {
return "Twelve in decimal is {c::k}.";
}
}
这里是正确的解决方案吗?
这里是正确的解决方案吗?
是的。扩展的卷曲语法不支持它。
或者,您可以将常量列表导出到数组并使用它(或将常量导出为单个标量变量名称),但这并不是 IMO 的好解决方案。
请注意,常量是可用的,因为您可以这样做:
const k = 'foo';
$foo = 'bar';
echo "{${c::k}}"
给你,但这不是你想要的。bar
这有点晦涩难懂,但在手册中有一个关于此的注释。
{$} 中的函数、方法调用、静态类变量和类常量自 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";