Avantages / inconvénients de heredoc vs nowdoc en php

en tant que débutant, on m'a conseillé d'utiliser de préférence heredoc par rapport à trop de codes imbriqués (voir T_else inattendu dans le code php ).

mais je n'arrive pas à comprendre s'il y a une différence significative entre heredoc et nowdoc.

quels seraient les avantages pour heredoc et nowdoc par rapport à l'autre qui serait important pour un internaute novice de comprendre (i.e. pas très petits avantages, mais importants à comprendre pour moi).

33
demandé sur Community 2012-06-22 12:55:20

3 réponses

les Nowdocs sont à des chaînes mono-citées ce que les heredocs sont à des chaînes double-citées. Un nowdoc est spécifié de la même façon qu'un heredoc, mais aucun parsing n'est fait à l'intérieur d'un nowdoc. La construction est idéale pour intégrer du code PHP ou d'autres grands blocs de texte sans avoir besoin de s'échapper.

http://php.net/manual/en/language.types.string.php#language.types.string.syntax.nowdoc

dans les autres mots:

$foo = 'bar';

$here = <<<HERE
    I'm here , $foo !
HERE;

$now = <<<'NOW'
    I'm now , $foo !      
NOW;

$here est " je suis là , bar ! , tandis que $now est " je suis maintenant, $ foo !" .

si vous n'avez pas besoin d'interpolation de variable mais avez besoin de caractères spéciaux comme $ dans votre chaîne de caractères, Nowdocs sont plus faciles à utiliser. C'est tout.

87
répondu deceze 2018-02-20 11:27:24

Nowdoc est génial quand vous ne voulez pas vous occuper de la citation et de la suppression de chaînes complexes, car il n'interprétera aucune citation et n'acceptera aucune variable. En tant que tel, il est bien adapté à l'affichage manuel de morceaux de code réels!

cependant, si vous utilisez un mélange d'heredocs et de nowdocs pour des blocs de contenu string, ce qui est une tentation facile de tomber dans, vous pourriez facilement courir dans XSS (cross site scripting) problèmes où-jamais vous utilisez heredoc! En tant que tel, cette approche n'est tout simplement pas assez propre pour moi de recommander à un développeur débutant en php! Au lieu de cela, vous devriez essayer d'utiliser des gabarits (de n'importe quel type, ou n'importe quel moteur de gabarit que vous aimez), pour ces grands blocs d'information. Après tout, vous ne voulez pas de html dans votre php, et vous-certainement - ne voulez pas de javascript injecté par l'utilisateur, comme:

$username = '<script>alert(document.cookie.toString())</script>';

$insecure_example = <<<HERE
    I really like having my site exploited, $username
HERE;

n'utilisez donc pas HEREDOCS et NOWDOCS à la place d'une approche ou d'un moteur de templage approprié.

1
répondu Kzqai 2015-10-17 14:15:38

heredocs

1. heredocs texte se comporte comme une chaîne de caractères entre guillemets, sans les doubles quotes.

2. Cite dans un heredoc n'ont pas besoin d'être échappé, mais les codes d'échappement \n saut de ligne,

\r retour chariot, \t tabulation horizontale, \v tabulation verticale, \e s'échapper, \f saut de page, \ barre oblique inverse\$ signe de dollar,\" guillemet double
peut encore être utilisé. Les Variables sont développées, mais le même soin doit être pris lors de l'expression des variables complexes à l'intérieur d'un heredoc comme avec les chaînes.

exemple:

$myname='Tikku';
$heredoc_exmaple= <<<HEREDOC
\n ,\r ,\t ,\r ,\v ,\e ,\f ,\ , \ , ,$ , $myname , ' , $myname ,  \" ,\'
HEREDOC;
echo $heredoc_exmaple;

//OUTPUT \n ,\r ,   , ,\v ,\e , ,\ , \ , ,$ , Tikku , ' , $myname , \" ,\'

nowdocs

1. nowdocs texte se comporte comme une simple chaîne de caractères entre guillemets, sans les guillemets simples.

2. Les citations dans un nowdocs n'ont pas besoin d'être échappées.Les Variables n'y sont pas développées.L'avantage de nowdocs est d'intégrer du code PHP et des codes escape sans avoir besoin de s'échapper.

exemple:

$myname='Tikku';
$nowdoc_exmaple= <<<'NOWDOC'
\n ,\r ,\t ,\r ,\v ,\e ,\f ,\ , \ , ,$ , $myname  , ' , $myname ,  \" ,\'
NOWDOC;

echo $nowdoc_exmaple;

//OUTPUT \n ,\r ,\t ,\r ,\v ,\e ,\f ,\ , \ , ,$ , $myname , ' , $myname , \" ,\'

syntaxe : un nowdoc est identifié avec la même séquence <<< utilisée pour heredocs, mais l'identificateur qui suit est inclus dans guillemets simples, par exemple < < < 'NOWDOC'. Toutes les règles relatives aux identificateurs héréditaires s'appliquent également aux identificateurs nowdoc, en particulier celles concernant l'apparence de l'Identificateur de fermeture.

1
répondu Dhairya Lakhera 2017-10-13 09:42:54