php heredocs语法里面的条件语句?

时间:2010-10-25 05:58:11

标签: php conditional heredoc

我想知道你是否可以在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 :))谢谢

3 个答案:

答案 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');