我想知道你是否可以在heredocs中有条件状态,这是我的脚本但是deosnt正确解析了$ username?
php代码:
function doSomething($username) {
if (isset($_SESSION['u_name'])){
$reply ='<a class ="reply" href="viewtopic.php?replyto=@$username.&status_id=$id&reply_name=$username"> reply </a>';
return <<<ENDOFRETURN
$reply
ENDOFRETURN;
这个问题是在html上呈现的$ username变量deosnt。它仍然是$ username :))谢谢
答案 0 :(得分:7)
易。用花括号包裹所有内容(显然在Heredocs中支持),然后使用匿名函数并返回逻辑所需的内容:]你甚至可以使用它并在heredocs中的匿名函数变量中使用表达式。
示例:强>
// - ############# If statement + function to set #################
$result = function ($arg1 = false, $arg2 = false)
{
return 'function works';
};
$if = function ($condition, $true, $false) { return $condition ? $true : $false; };
// - ############# Setting Variables (also using heredoc) #########
$set = <<<HTML
bal blah dasdas<br/>
sdadssa
HTML;
$empty = <<<HTML
data is empty
HTML;
$var = 'setting the variable';
// - ############## The Heredoc ###################################
echo <<<HTML
<div style="padding-left: 34px; padding-bottom: 18px;font-size: 52px; color: #B0C218;">
{$if(isset($var), $set, $empty)}
<br/><br/>
{$result()}
</div>
HTML;
答案 1 :(得分:6)
你想在heredoc中有条件语句吗?或者你想知道为什么你的代码不起作用?因为目前你在heredoc中有 no 条件语句,但无论如何都不可能。
如果你想知道为什么你的代码不起作用:
这与heredoc无关,这是因为整个$reply
字符串包含在单引号中,其中不支持变量解析。使用字符串连接:
$reply ='<a class ="reply" href="viewtopic.php?replyto=@' . $username . '.&status_id=$id&reply_name=' . $username . '"> reply </a>'
我希望您在真实代码中使用heredoc做更多事情,否则return $reply
会更容易;)(并且您缺少括号)。
答案 2 :(得分:0)
这个问题已经老了一点,但提供了一些更完整的答案,并提供了一些可能的解决方案。条件不允许“内部”heredoc,但你可以使用带有heredocs的条件。
这些示例可以让您了解heredoc的使用方法。请注意,heredoc的第一行以3个小于符号和第一行末尾没有空格的任意文本开头。按enter键。必须同样关闭heredoc。您可能知道,用于打开heredoc的文本必须用于关闭它,通常但不要求后面跟着分号。确保没有跟随空格或字符的分号或最后一个文本字符,然后按Enter键。
function doSomething($username = '', $status_id = '') {
if ('' != $username && '' != $status_id) {
$reply = <<<EOT
<a class ="reply" href="viewtopic.php?replyto=@{$username}&status_id={$status_id}&reply_name={$username}"> reply </a>
EOT;
} else {
$reply = <<<EOT
<h2>The username was not set!</h2>
EOT;
}
return $reply;
}
echo doSomething('Bob Tester', 12);
echo doSomething('Bob Tester');
echo doSomething('', 12);
根据您的具体情况,您可能会发现使用课程进行您希望在heredoc中使用的比较会很有帮助。这是一个如何做到这一点的例子。
class Test {
function Compare($a = '', $b = '') {
if ($a == $b)
return $a;
else
return 'Guest';
}
};
function doSomething($username = '') {
$Test = new Test;
$unme = 'Bob Tester';
$reply = <<<EOT
<h2>Example usage:</h2>
Welcome {$Test->Compare($username, '')}<br />
<br />
Or<br />
<br />
Welcome {$Test->Compare($username, $unme)}
EOT;
return $reply;
}
echo doSomething('Bob Tester');