的index.php
<?php
$title = "World";
echo loadTemplate();
?>
的template.php
<?php
function loadTemplate(){
return <<<EOF
Hello {$title}
EOF;
}
?>
在运行 index.php 时,它应输出Hello World
,但仅打印Hello
。如何让我的脚本回显Hello World
?
答案 0 :(得分:3)
每当你想在函数中使用全局变量时,你需要声明它,使用global
关键字将它带入范围:
function loadTemplate() {
global $title;
return <<<EOF
Hello {$title}
EOF;
}
答案 1 :(得分:1)
请参阅globals:
此脚本不会产生任何输出,因为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);
答案 2 :(得分:0)
使用global
s是非常草率和糟糕的做法。它显示了一个懒惰的开发人员,当你再回到它一段时间后,你不会知道$title
是什么。
$title = "World";
echo loadTemplate($title);
function load_template($title)
{
return <<<EOF
Hello, {$title}
EOF;
}
有关详细信息,请查看variable scope。
注意:您的原始代码不正确,您的案例中的结束标识符EOF
无法缩进。