如果这听起来很愚蠢,我很抱歉!我正在使用PHP来创建我的网站的某些部分,如标题,然后在每个页面上回显它们。问题是我想把一些PHP代码放在这个部分中,如下所示:
<?php
function makeHeader () {
$menuContent = <<<MENU
<!DOCTYPE html>
<html> etc..........
<?php
if(isset($_SESSION['user']))
{
$user = isset($_SESSION['user']) ? $_SESSION['user'] : '';
echo "<a href='logout.php'>$user</a>";
}
else
{
echo "some text..";
}
?>
MENU;
$menuContent .= "\n";
return $menuContent;
}
?>
这个是可能的吗?它抛出了错误,但从if(isset($_SESSION['user']))
行开始,而不是从它上面的行开始。
发布于 2012-01-11 09:48:34
使用单引号或双引号字符串代替heredoc,应该没问题。
发布于 2012-01-11 09:49:05
你得到的错误(但没有提到)可能是一个解析错误。HEREDOC
语法需要用{}
大括号将变量括起来,或者对于简单的数组访问没有键引号。解决方法是使用NOWDOC
字符串。
但无论如何你都不能用这种方法来做。字符串上下文中的PHP代码不能运行。而且应用任何变通方法都是没有意义的。只需使用include脚本而不是HEREDOC,并使用ob_start
和ob_get_clean
来捕获输出。
发布于 2012-01-11 09:46:13
你的代码是不完整的吗?或者您是否在函数makeHeader的末尾遗漏了一个闭合的}?这将在"if“行抛出一个异常。更不用说在顶部HTML之前缺少的php结束标记了。
我认为真正的问题是你不能在一个函数中有和结束标签和HTML。如果你真的需要它,那么你可以在需要的时候“回显”HTML。但是我不能想象您会想要从头到尾都使用echo语句来编写整个文档。
以下是合适的吗?
<?PHP
session_start();
$menuContent = <<<MENU;
?>
<!DOCTYPE html>
<html>
<body>
<?PHP
echo $menuContent;
if(isset($_SESSION['user'])) {
$user = isset($_SESSION['user']) ? $_SESSION['user'] : '';
echo "<a href='logout.php'>$user</a>";
} else {
echo "some text..";
}
?>
etc..........
</body>
</html>
或者你需要在之前在菜单部分中构建它吗?
https://stackoverflow.com/questions/8813117
复制相似问题