【问题标题】:Using static class variables -- in a heredoc使用静态类变量——在heredoc中
【发布时间】:2011-06-09 05:27:56
【问题描述】:

我设置了一个类,简化后是这样的:

class Labels {
    static public $NAMELABEL = "Name";
}

我成功让以下代码正常工作:

echo '<table border="1">';
  echo '<tr>';
  echo "<th>" . Labels::$NAMELABEL . "</th>";
  echo '</tr>';

 // the rest of the Table code not shown for brevity...

echo "</table>";

当我运行它时,我看到一个带有名为 Name 的列标题的表格 -- 所以它工作正常。

但不是在 heredoc 中——我得到“注意:未定义的变量:C:\xampp........blah blah 中的 NAMELABEL” 当我运行以下命令时:

    echo <<<_END
       <form action="index.php" method="post"><pre>
       Labels::$NAMELABEL : <input type="text" name="author" />
       <input type="submit" value="ADD RECORD" />
    </pre></form>
_END;

我尝试了各种引用,字符串连接运算符'.',没有任何效果。 我想“好吧,我让静态类变量在 HTML 表中工作, 为什么不是一个heredoc。”

当我喜欢 heredocs,他们有一个奇怪的名字和奇怪的问题。 这是我渴望的那种令人费解的乐趣,heredocs 是 正义的小猴子。

我真的很想在这里使用我的静态类变量——有什么组合吗? 允许我将它们嵌入到我的 heredocs 中的引用/字符串连接?

【问题讨论】:

  • 你运行的是哪个版本的 PHP,5.3 还是更早的版本?
  • 这是 Heredoc 解析器中长期存在的错误(范围问题)。我今天在搜索有关静态变量 heredoc 解析错误的信息时遇到了这个问题。

标签: php html


【解决方案1】:

heredocs 中的插值与双引号中的插值相同,因此您可以使用 curly brace ("complex") syntax

但是解析器不能识别静态类变量(请参阅以前的文档)。为了引用静态类变量,您需要在本地进行如下设置:

$label = Labels::$NAMELABEL;

echo <<<_END
    <form action="index.php" method="post"><pre>
       $label : <input type="text" name="author" />
       <input type="submit" value="ADD RECORD" />
    </pre></form>
_END;

【讨论】:

  • @Jordan 为什么 $ 是必要的,没有它它会工作吗?您引用的文档中的一些示例执行{$foo-&gt;$bar}{${beers::softdrink}} 之类的操作。那么{Labels::$NAMELABEL},如果没有 $,也可以工作吗?
  • 谢谢,这让我很接近——不过,为了在我的 Netbeans 编辑器中清除“错误语法”警告,我必须有一个空格,如下所示:${ Labels::$NAMELABEL } -- 清除浏览器中的语法错误。现在它评估为 Name 但浏览器将其标记为 Notice: Undefined variable: Name in C:\xampp.........blah blah.
  • 我相信在开头的{ 之前或之后必须有一个$。由于Labels 是您代码中的类名(不是$),因此您必须使用${ 以便解释器知道该做什么。
  • 哦,看来PHP在使用带有字符串插值的静态类变量时有问题,即使是花括号语法。在上面链接中的代码示例之后的文档中有关于它的注释。我更新了我的代码以显示一个不幸的必要解决方法。
  • 不飞——Netbeans 正确地对语法进行颜色编码,但是当 Labels::$NAMELABLE 评估为 Name 时,它​​是一个错误。我尝试了单引号,双引号,我尝试了大括号内外的 $,尝试了嵌套大括号,不知何故,我怀疑这个 heredoc 语法可能不适用于静态类变量。我将大胆猜测并怀疑在heredoc的
猜你喜欢
  • 1970-01-01
  • 2015-02-03
  • 1970-01-01
  • 2019-03-05
  • 1970-01-01
  • 2017-02-08
  • 1970-01-01
  • 2018-12-25
相关资源
最近更新 更多