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

为什么php在某些情况下不能在字符串模板中显示变量?,php,Php,提前谢谢你的时间。我是php的新手,遇到了一个奇怪的问题,至少对我来说很奇怪。它是关于在字符串模板中显示变量的。请参阅下面的代码: public function welcome() { $data="everyone"; $b = $this->returnTemplate(); $a = "<div>dear $data</div>"; } public function returnTemplate() { return "&l

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

public function welcome() {
    $data="everyone";
    $b = $this->returnTemplate();
    $a = "<div>dear $data</div>";
}
public function returnTemplate()
{
    return "<div>dear $data</div>";
}
公共功能欢迎(){
$data=“每个人”;
$b=$this->returnTemplate();
$a=“亲爱的$data”;
}
公共函数返回模板()
{
返回“亲爱的$data”;
}
我只是认为$a和$b应该是相同的值,亲爱的大家,但实际上只有$a是,而$b是亲爱的。 这让我很困惑,我想知道为什么?有人能给我解释一下吗

提前感谢,欢迎任何反馈

公共功能欢迎(){
public function welcome() {
 $data="everyone";
 $b = $this->returnTemplate($data);
 $a = "<div>dear $data</div>";
}
public function returnTemplate($data)
{
  return "<div>dear $data</div>";
}
$data=“每个人”; $b=$this->returnTemplate($data); $a=“亲爱的$data”; } 公共函数返回模板($data) { 返回“亲爱的$data”; }
这很有效


您遇到了“可变范围”。由于您在welcome()函数中定义了变量$data,因此该变量在该函数之外的任何地方都不可用。要克服此问题,请将其移出函数或将其作为参数传递给returnTemplate函数


更多信息:

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

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

public function welcome() {
 $data="everyone";
 $b = $this->returnTemplate($data);
 $a = "<div>dear $data</div>";
}
public function returnTemplate($data)
{
  return "<div>dear $data</div>";
}
公共功能欢迎(){
$data=“每个人”;
$b=$this->returnTemplate($data);
$a=“亲爱的$data”;
}
公共函数返回模板($data)
{
返回“亲爱的$data”;
}

2) 在顶部/开头将变量声明为全局变量。因此,它将有一个超出特定功能的范围,并实现您正试图实现的功能

它被称为,并且有完整的文档。谢谢,我现在知道怎么做了~非常感谢,这似乎是一个愚蠢的问题,我现在知道怎么做了很好,我现在知道原因了,谢谢你的时间