2010-10-25 47 views
3

我想知道如果你可以在heredocs裏面有條件的語句,這是我的腳本,但是deosnt正確地解析出$ username嗎?條件語句裏面的PHP heredocs語法?

PHP代碼:

function doSomething($username) { 

if (isset($_SESSION['u_name'])){ 
$reply ='<a class ="reply" href="[email protected]$username.&status_id=$id&reply_name=$username"> reply </a>'; 

return <<<ENDOFRETURN 

$reply 

ENDOFRETURN; 

這個問題是$ username變量deosnt得到呈現的HTML。它仍然是$ username :))謝謝

回答

5

你想在heredoc中有條件語句,或者你想知道爲什麼你的代碼不工作?因爲目前在heredoc中有沒有條件語句,但它不可能。

如果你想知道爲什麼你的代碼不起作用:
這是不相關的定界符,這是因爲整個$reply字符串是用單引號,在不支持的變量解析。使用字符串連接:

$reply ='<a class ="reply" href="[email protected]' . $username . '.&status_id=$id&reply_name=' . $username . '"> reply </a>' 

我希望您在定界符在您的實際代碼做多,否則return $reply會更容易;)(和你錯過括號)。

+1

+1 - 讀到這裏http://www.php.net/manual/en/language.types.string.php – Phil 2010-10-25 06:04:21

+0

+1 *「我希望你在你的真實代碼中使用heredoc做得更多「* – jensgram 2010-10-25 06:07:04

+0

歡呼它的作品,沒有即時返回一個段落,這個例子只是爲了說明,我沒有想傷害你的眼睛:))歡呼聲! – getaway 2010-10-25 06:13:29

0

這個問題已經老化一點,但提供了一個更完整的答案與幾個可能的解決方案。條件不允許在heredoc「內部」,但是你可以在heredocs中使用條件。

這些例子應該給你一個heredoc使用的想法。請注意,heredoc的第一行從3開始小於第一行的結尾符號和一些沒有空格的任意文本。按回車。 heredoc必須同樣關閉。正如您可能知道的那樣,用於打開heredoc的文本必須用於關閉它,通常不需要使用分號。確保沒有尾隨空格或字符跟隨分號或上一個文本字符,然後按下Enter鍵。

function doSomething($username = '', $status_id = '') { 

    if ('' != $username && '' != $status_id) { 

    $reply = <<<EOT 
<a class ="reply" href="[email protected]{$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'); 
2

簡單。將所有內容都包裹在花括號中(顯然在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;