-1

我正在使用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 语句中,类常量的值softdrink被评估为字符串'rootbeer',它又是一个包含字符串'A & W'的变量名。值“A & W”被打印出来。

在第二个 echo 语句中,我只想显示类常量softdrink中存在的值,即字符串'rootbeer'

但我做不到。请在这方面帮助我。

PS:请不要要求我使用字符串连接来实现输出。我只想通过在双引号字符串中使用类常量来实现输出。

4

3 回答 3

1

阿法克这是不可能的。字符串中的整个“变量解析”(扩展的卷曲语法)是基于变量完成的。变量总是以 $ 符号开头,因此不以 $ 开头似乎不起作用。(即不能使用不是(部分)变量的所有内容。)。

简化示例(不起作用):

const TEST = 'A & W';
echo "I'd like an {TEST}\n";

函数调用相同(也不能直接工作)

$test = '   A & W   ';
echo "I'd like an {trim($test)}\n";

只有在“子”花括号中才能使用所需的输出,但必须再次将其解析为变量,这使得它不可能(此时)。

是否有效:

$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";

这与我建议的做法相去甚远!!!

于 2018-07-10T11:59:35.427 回答
0

像这样做 -

echo "I'd like an ". beers::softdrink ."\n";
于 2018-07-10T11:43:17.907 回答
0

您可以使用 printf -

printf("I'd like an %s\n", beers::softdrink);
于 2018-07-10T11:56:13.987 回答