PHP中字符串中的类常量

18 php string

我的阅读手册(中位正好节标题"的字符串访问和修改"前),你可以做一些花哨的技巧与类常量和{}在字符串中,但你不能做简单的事情,会让这个方法回归真相:

class c {
    const k = '12';
    public function s() {
        return "Twelve in decimal is {c::k}.";
    }
}
Run Code Online (Sandbox Code Playgroud)

这里是正确的解决方案吗?

Mat*_*hew 11

这里是正确的解决方案吗?

是.扩展的卷曲语法不支持它.

或者,您可以将常量列表导出到数组并使用它(或将常量导出到单个标量变量名称),但这不是一个很好的解决方案IMO.

请注意,常量可用,因为您可以这样做:

const k = 'foo';
$foo = 'bar';
echo "{${c::k}}"
Run Code Online (Sandbox Code Playgroud)

给你bar,但那不是你想要的.


sim*_*aun 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";
Run Code Online (Sandbox Code Playgroud)


mar*_*rio 5

卷曲语法仅适用于"变量表达式".而且你需要任何可以访问的东西{$.

哦,只有解决方法:

    $c = "constant";
    return "Twelve in decimal is {$c('c::k')}.";
Run Code Online (Sandbox Code Playgroud)

这显然不比仅使用字符串连接更短或更易读.