2010-10-25 34 views
3

Je me demandais si vous pouviez avoir des déclarations conditionnelles à l'intérieur d'un heredocs, ceci est mon script mais il ne détecte pas correctement le nom $ username?instructions conditionnelles à l'intérieur de la syntaxe php heredocs?

code 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; 

le problème est la variable $ username deosnt se rendre sur le html. il reste $ username :)) merci

Répondre

5

Voulez-vous avoir des instructions conditionnelles dans heredoc ou vous demandez-vous pourquoi votre code ne fonctionne pas? Parce que vous avez actuellement pas de instruction conditionnelle dans heredoc, mais ce n'est pas possible de toute façon.

Si vous vous demandez pourquoi votre code ne fonctionne pas:
Ce n'est pas lié à heredoc, il est parce que la chaîne entière $reply est enfermé dans des guillemets simples , où l'analyse syntaxique variable n'est pas pris en charge. Utilisez la concaténation de chaîne:

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

J'espère que vous faites plus avec heredoc dans votre code réel, sinon return $reply serait plus facile;) (et que vous manquez entre parenthèses).

+1

+1 - lire ici http://www.php.net/manual/en/language.types.string.php – Phil

+0

+1 pour * "J'espère vous faites plus avec heredoc dans votre vrai code "* – jensgram

+0

acclame ça marche, pas d'im retournant un paragraphe entier, cet exemple était juste à titre d'illustration seulement, je didint vouloir te faire mal aux yeux :)) acclamations !! – getaway

0

Cette question a un peu vieilli mais pour fournir une réponse plus complète avec quelques solutions possibles. Les conditionnels ne sont pas autorisés "à l'intérieur" d'un heredoc mais vous pouvez utiliser des conditionnels avec heredocs.

Ces exemples devraient vous donner une idée de l'utilisation de Heredoc. Prenez note que la première ligne d'un heredoc commence avec 3 moins de symboles et du texte arbitraire sans espace à la fin de la première ligne. Appuyez sur Entrée. L'heredoc doit être fermé de la même manière. Comme vous le savez probablement, le texte utilisé pour ouvrir heredoc doit être utilisé pour le fermer, ce qui est généralement mais pas obligatoire pour être suivi par un point-virgule. Assurez-vous qu'aucun espace ou caractère final ne suit le point-virgule ou le dernier caractère de texte, puis appuyez sur Entrée.

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); 

En fonction de votre situation, vous trouverez peut-être utile d'utiliser une classe pour faire vos comparaisons que vous souhaitez utiliser dans votre heredoc. Voici un exemple de comment vous pouvez faire cela.

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

Facile. Enveloppez tout dans des accolades (évidemment supportées dans Heredocs) puis utilisez une fonction anonyme et renvoyez ce qui est nécessaire pour la logique:] vous pouvez même avancer et utiliser des expressions à l'intérieur de la variable de fonction anonyme dans les heredocs.

Exemple:

// - ############# 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;