8

ヒアドキュメント内に条件付きステートメントを含めることができるかどうか疑問に思っていました。これは私のスクリプトですが、$ 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;

これに伴う問題は、$username変数deosntがhtmlにレンダリングされることです。$ usernameのままです:))ありがとう

4

3 に答える 3

15

簡単。すべてを中括弧で囲み(明らかにヒアドキュメントでサポートされています)、無名関数を使用してロジックに必要なものを返します:]それを進めて、ヒアドキュメント内の無名関数変数内で式を使用することもできます。

例:

// - ############# 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;
于 2015-08-11T15:52:52.960 に答える
7

ヒアドキュメントに条件文を入れたいですか、それともコードが機能しないのか疑問に思いますか?現在、ヒアドキュメント内に条件ステートメントがないためですが、とにかくそれは不可能です。

コードが機能しない理由がわからない場合:
これはヒアドキュメントとは関係ありません。これは、文字列全体が一重引用符$replyで囲まれているためです。変数の解析はサポートされていません。文字列連結を使用します。

$reply ='<a class ="reply" href="viewtopic.php?replyto=@' . $username . '.&status_id=$id&reply_name=' . $username . '"> reply </a>'

実際のコードでヒアドキュメントを使ってもっと多くのことをしているといいのですが、そうでなけれreturn $replyばもっと簡単になります;)(そして括弧がありません)。

于 2010-10-25T06:02:12.890 に答える
1

この質問は少し古くなっていますが、いくつかの可能な解決策でより完全な答えを提供するためです。条件付きはヒアドキュメントの「内部」では許可されていませんが、ヒアドキュメントで条件付きを使用できます。

これらの例は、ヒアドキュメントの使用法のアイデアを与えるはずです。ヒアドキュメントの最初の行は、3未満の記号と、最初の行の終わりにスペースのない任意のテキストで始まることに注意してください。Enterキーを押します。ヒアドキュメントも同様に閉じる必要があります。ご存知かもしれませんが、ヒアドキュメントを開くために使用されるテキストは、ヒアドキュメントを閉じるために使用する必要があります。これは通常、セミコロンが後に続く必要はありません。末尾の空白や文字がセミコロンまたは最後のテキスト文字の後にないことを確認してから、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);

特定の状況によっては、ヒアドキュメントで使用したい比較を行うためにクラスを使用すると役立つ場合があります。これを行う方法の例を次に示します。

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');
于 2012-01-07T23:31:37.500 に答える