0

索引.php

<?php 
$title = "World";
echo loadTemplate();
?>

模板.php

<?php
function loadTemplate(){
    return <<<EOF
    Hello {$title}
    EOF;
}
?>

在运行index.php时,它应该输出Hello World但它只打印Hello。如何使我的脚本回显Hello World

4

3 回答 3

3

每当您想在函数中使用全局变量时,都需要声明它,使用global关键字将其带入范围:

function loadTemplate() {
  global $title;
  return <<<EOF
    Hello {$title}
    EOF;
}
于 2013-05-20T18:54:54.097 回答
1

全局

此脚本不会产生任何输出,因为 heredoc 引用了$title变量的本地版本,并且尚未在此范围内为其分配值。

你需要告诉 PHP 你想$title作为一个全局对象使用。

function loadTemplate(){
    global $title;
    return <<<EOF
    Hello {$title}
    EOF;
}

或者,这更可取,因为全局变量很混乱,将其作为参数传递:

function loadTemplate($what){
    global $title;
    return <<<EOF
    Hello {$what}
    EOF;
}

echo loadTemplate($title);
于 2013-05-20T18:56:14.787 回答
0

使用 s 是非常草率和不好的做法global。它显示了一个懒惰的开发人员,当您稍后再看它时,您将不知道是什么$title

$title = "World";
echo loadTemplate($title);

function load_template($title)
{
    return <<<EOF
Hello, {$title}
EOF;
}

有关更多信息,您应该查看变量范围

注意:您的原始代码不正确,EOF在您的情况下,关闭标识符不能缩进。

于 2013-05-20T19:04:44.137 回答