为什么php在某些情况下无法在字符串模板中显示变量?

时间:2015-08-19 15:04:23

标签: php

感谢您提前的时间。我是php的新手,遇到了一个奇怪的问题,至少对我来说这很奇怪。它是关于在字符串模板中显示变量。请参阅以下代码:

public function welcome() {
    $data="everyone";
    $b = $this->returnTemplate();
    $a = "<div>dear $data</div>";
}
public function returnTemplate()
{
    return "<div>dear $data</div>";
}

我只是认为$ a和$ b应该是相同的值<div>dear everyone</div>,但事实上只有$ a是$ b而{b}是<div>dear </div>。 这真让我困惑,我想知道为什么?有人可以向我解释一下吗?

提前致谢,欢迎任何反馈!

3 个答案:

答案 0 :(得分:1)

您遇到'变量范围'。正如您在welcome()函数中定义了变量$ data一样,它在该函数之外的任何地方都不可用。要解决这个问题,请将其移出函数或将其作为参数传递给returnTemplate函数。

更多信息:http://php.net/manual/en/language.variables.scope.php

答案 1 :(得分:0)

public function welcome() {
 $data="everyone";
 $b = $this->returnTemplate($data);
 $a = "<div>dear $data</div>";
}
public function returnTemplate($data)
{
  return "<div>dear $data</div>";
}

这有效。

http://php.net/manual/en/language.variables.scope.php

答案 2 :(得分:0)

如前所述,您试图破坏变量范围。换句话说,您尝试在其范围之外使用局部变量(您最初声明/定义的函数)。 有两种方法可以实现您的目标:

1)将变量作为参数传递给函数,然后使用返回的值,如下所示:

public function welcome() {
 $data="everyone";
 $b = $this->returnTemplate($data);
 $a = "<div>dear $data</div>";
}
public function returnTemplate($data)
{
  return "<div>dear $data</div>";
}

2)在top / start上将变量声明为 GLOBAL 。因此,它将具有特定功能的范围,并实现您正在尝试的功能。