7
votes

Déclarations conditionnelles à l'intérieur de la syntaxe Heredocs PHP?

Je me demandais si vous pouvez avoir des stations conditionnelles à l'intérieur d'une hérérocs, c'est mon script, mais il a désosréner le nom d'utilisateur $ correctement?

Code PHP: P>

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;


0 commentaires

3 Réponses :


7
votes

Voulez-vous avoir des déclarations conditionnelles dans HereDoc ou vous demandez-vous pourquoi votre code ne fonctionne pas? Parce que vous avez actuellement no déclaration conditionnelle à l'intérieur de Heredoc, mais ce n'est pas possible de toute façon.

Si vous vous demandez pourquoi votre code ne fonctionne pas:
Ceci n'est pas lié à Heredoc, c'est parce que l'ensemble de la chaîne $ $ est joint dans citations simples , où l'analyse variable n'est pas prise en charge. Utilisez la concaténation de chaîne: xxx

J'espère que vous allez faire plus avec Heredoc dans votre code réel, sinon retour $ Répondre serait plus facile;) (et vous êtes des crochets manquants).


2 commentaires

+1 pour "J'espère que vous allez faire plus avec Heredoc dans votre code réel"


Bravo ça marche, non IM Renvoie tout un paragraphe, cet exemple était juste pour l'illustration seulement, je voulais blesser vos yeux :)) acclamations !!



1
votes

Cette question a un peu vieilli mais de fournir une réponse plus complète avec quelques solutions possibles. Les conditionnels ne sont pas autorisés «à l'intérieur» un Heredoc mais vous pouvez utiliser des conditionnels avec des hérédocs.

Ces exemples devraient vous donner une idée de l'utilisation d'Heredoc. Notez que la première ligne d'un Heredoc commence avec 3 moins que des symboles et un texte arbitraire sans espace à la fin de la première ligne. Appuyez sur Entrée. L'hérédoc doit être fermé de la même manière. Comme vous le savez probablement, le texte utilisé pour ouvrir l'hereDoc doit être utilisé pour la fermer qui est généralement mais non obligé d'être suivi d'un point-virgule. Assurez-vous qu'aucun point de suivi ou de caractères suivez le point-virgule ou le dernier caractère de texte, puis appuyez sur ENTER. P>

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


0 commentaires

14
votes

facile. Emballez tout dans les accolades bouclées (évidemment pris en charge dans HereDocs), puis utilisez une fonction anonyme et renvoyez ce qui est nécessaire pour la logique:] Vous pouvez même obtenir l'avance avec elle et utiliser des expressions à l'intérieur de la variable de fonction anonyme dans les Heedocs.

exemple: xxx


1 commentaires

Peut-être pas facile? mais certainement rusé. Je me suis retrouvé à utiliser un Heredoc, puis de revenir plus tard et de faire certaines parties conditionnelles. Je pense que je n'aurais pas utilisé Heredoc en premier lieu si je savais où ça allait, mais que je l'ai fait, je ne voulais pas y réécrire. Cette solution a fonctionné, mais je suis un peu inconfortable que les avantages d'Heredocs s'érodent rapidement car vous devez utiliser un codage intelligent pour contourner ses lacunes. À l'avenir, j'utiliserai probablement des fonctions d'obstacle () pour collecter des blocs de HTML dans une variable, comme je l'ai dans le passé.