9
votes

Quel est le pro et les inconvénients à l'aide de la notation Heredoc dans votre PHP?

Je n'ai jamais vu quelque chose comme ça avant. Donc, ça me confondre depuis un moment. Mais maintenant je comprends et l'utilise parfois. Ainsi, après une brève expérience, quelqu'un peut-il me dire quel est le pro et les inconvénients utilisant la notation Heredoc dans votre PHP?

$stringval = <<<MYHEREDOC

   just creating variable here. nothing more.

MYHEREDOC;


4 commentaires

@Otto Allmendeur: Et qu'est-ce qui ne va pas avec ça?


@Otto allmendeur: vraiment? J'ai eu ceci à partir d'un livre PHP. Juste comme la réponse de St. Johnson ci-dessous. mais thak vous, votre lien est une bonne référence


Ne t'inquiète pas. Votre exemple est correct. PHP utilise simplement trois << / code> pendant que la plupart des langues utilisent seulement deux.


@rest mon mauvais - confondu avec quelque chose d'autre


8 Réponses :


7
votes

Il y a maintenant deux types d'hérédoc: "

  • Heredoc strong>, similaire aux guillemets "" code> convertira toutes les variables en leur valeur sur la création. Ceci est très utile pour mettre des espaces / retours exacts où vous en avez besoin (pas besoin de \ n ou \ t). Li>
  • Nowdoc strong>, similaire à des marques simples '' code> sera non strong> convertir toutes les variables et stocke uniquement la valeur du texte. Cela peut être utilisé dans les valeurs par défaut des variables de classe (contrairement à Heredoc). Li> ul>

    Heredoc Exemple: p> xxx pré>

    EXEMPLE NOWDOC: p>

    function foo() {
      if ($bar) {
        $string = <<<LINE
    Hey, how is it going, $name.
    This is a great test of Heredoc and Nowdoc.
    Blah blah blah, go upvote me!
    LINE;
      }
    }
    


1 commentaires

@st. John Johnson, merci beaucoup de la réponse et de l'explication. C'est tellement détaillé. Mais à propos de la vérité, je préfère le mode de codage @cletus. Ce n'est qu'une question de préférence.



4
votes

Eh bien, le (s) pro (s) est

  • C'est pratique pour de gros morceaux de texte avec des citations

    et le contre

    • Vous êtes rarement si jamais besoin de gros morceaux de texte dans mvc
    • casse une indentation
    • a des bizarreries si elles sont utilisées avec des classes (avant 5,3)

      Personnellement, je ne l'utilise pas.

      (une responsabilité obligatoire de tout cela étant une question de préférence, etc., etc.)


1 commentaires

Alors, qu'est-ce que vous utilisez dans le remplacement de Heredoc donné si vous avez de gros morceaux de chaîne? Je suis curieux. Seule une chose que je pouvais penser si sont les suivants: tampon de sortie, echo avec devis s'échappant, sprintf . Quelque chose d'autre qui me manque?



2
votes

Je ne l'utilise pas du tout. C'était assez utile pour Perl, comme Perl n'avait aucune fonctionnalité d'évasion HTML. Donc, PHP fait, et si je veux imprimer une grande quantité de texte, je ferais simplement fermer la balise PHP et le type de texte tel quel. Dans n'importe quel autre cas, les bonnes citations doubles me conviennent bien.


0 commentaires

8
votes

99% du temps que je l'utilise, c'est pour les requêtes SQL, par exemple: xxx pré>

Je trouve plus facile de repérer de telles requêtes dans le code source et de les copier et de les coller dans quelque chose à courir eux. Votre kilométrage peut varier. NOTE: STRUT> Vous pouvez faire plusieurs lignes avec des chaînes normales. J'ai tendance à éviter cela car la première ligne est indentée différemment au reste. P>

Le plus grand "pro" en ce qui me concerne est que vous n'avez pas besoin d'échapper à des citations. C'est particulièrement un problème avec Markup. Décidez de vous-même qui est plus facile à lire. En supposant: p> xxx pré>

version 1: guillemets simples h3> xxx pré>

version 2: Double citations h3> xxx PRE>

Version 3: HEREDEDOC H3>
$html = <<<END
<input type="$type" name="$name" value="$value">
END;


2 commentaires

En réponse à votre note sur la version 2, vous avez raison mais vous deviendriez une syntaxe XHTML incorrecte. :RÉ


XML permet des guillemets simples pour les attributs, donc XHTML fait également.



2
votes

Heredocs sont très utiles pour déversser de gros blobs de texte dans une variable ou directement sur le client. Il vous permet également de vous enregistrer plusieurs concatenations si vous construisez une longue chaîne multiligne. Le seul inconvénient principal est que vous devez pré-traiter toutes les données que vous insérerez.

echo '<input type ... snip ... value="' . htmlspecialchars($bar) . etc....


0 commentaires

1
votes

Il est très utile d'avoir un style de programmation très soigné séparer HTML avec PHP. Vos codes PHP seront très lisibles et plus faciles à comprendre. Il facilite considérablement les codes de débutation. Il vous permet de vous concentrer davantage sur la logique du programme plutôt que de la présentation avec HTML. Vous avez juste besoin d'une instruction ECHO plutôt que des scripts PHP gênants dans votre HTML. Pour illustrer comment il est utilisé, voici un exemple.

MasterPage.php xxx

méritbadges.php xxx

toutes les autres pages peuvent être créées de la même manière avec le ci-dessus exemple. N'oubliez pas que vous venez de créer une grosse chaîne pour votre sortie et de l'afficher dans votre fichier HMTL avec un seul écho! Il suffit d'analyser les codes ci-dessus et de voir comment améliorer votre programmation PHP avec Heredoc!


0 commentaires

1
votes

Est-ce une mauvaise façon de coder ou de bon moyen?

Vous voulez dire, est-ce une bonne pratique ou est-ce une mauvaise pratique?

Généralement, il n'y a rien de mal à l'utiliser. J'irais aussi loin pour dire qu'il y a quelque chose qui ne va pas avec pas en utilisant:

  1. Vous n'avez pas à échapper à des citations simples et doubles
  2. vous permet d'ajouter à une variable précédente tout en définissant un "contexte"
  3. permet un marquillage non-php tout droit (tel que JavaScript) à utiliser à côté de PHP; rend le code non-php notable
  4. Aucune différence notable de la performance [*]. Malgré tout, c'est trivial.

    Bien sûr, il n'y a rien de mal avec $ var = "Bienvenue, $ utilisateur ;" - Cependant, ce n'est pas idéal si vous avez l'intention de travailler avec grandes quantités du code étranger et souhaite maintenir la lisibilité:

    Vraiment, c'est un moyen idéal de faire face à la balise telle que HTML si vous ne pouvez pas la sortir directement.

    [*] basé sur des tests personnels, mais devrait rester vrai, peu importe.


0 commentaires

0
votes

tandis qu'il est acceptable d'utiliser Heredoc, l'inconvénient majeur à mon avis est que la plupart des IDE perdent la possibilité de suivre le code et d'afficher souvent des messages dans lesquels des balises de fermeture ne peuvent pas être trouvées - en particulier si une étiquette d'ouverture à l'intérieur d'un autre hérdoc à La balise finale ou le code est un mélange de tous les styles. Une des applications que j'ai héritées était partout. Par exemple.

echo <<<PART1
<table>
   <tr>
   ....
   </tr>
PART1;
//more php code
?>
</table>


0 commentaires