为什么在一个语句中而不是在另一个语句中对类常量值求值?

时间:2018-07-10 11:29:40

标签: php string class syntax class-constants

我正在使用 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。 ::请不要要求我使用字符串串联来实现输出。我只想通过在双引号字符串中使用类常量来实现输出。

3 个答案:

答案 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);