Vantaggi / inconvenienti di heredoc vs nowdoc in php

Come novizio, mi è stato consigliato di utilizzare preferibilmente heredoc rispetto a troppi codici annidati (vedi T_ELSE inaspettato nel codice php ).

Ma non riesco a capire se c'è una differenza significativa tra heredoc e nowdoc.

Quali sarebbero i vantaggi per heredoc e nowdoc rispetto all'altro che sarebbe importnte per un principiante capire (vale a dire non vantaggi molto minori ma importnti da capire per me).

Nowdocs sono le stringhe con quotatura singola quali heredoc sono per le stringhe con doppi apici. Un nowdoc è specificato in modo simile a un heredoc, ma non viene eseguito il parsing all'interno di un nowdoc. Il costrutto è ideale per incorporare codice PHP o altri grandi blocchi di text senza necessità di escape.

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

In altre parole:

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

$here è "Sono qui, bar!" , mentre $now è "Sono ora, $ pippo!" .

Se non hai bisogno di interpolazione variabile ma hai bisogno di caratteri speciali come $ all'interno della string, Nowdocs è più facile da usare. È tutto.

Nowdoc è ottimo quando non vuoi occuparti di quotare e smascherare stringhe complesse, dal momento che non interpnetworkingrà virgolette e non accetterà variables. In quanto tale, è adatto per visualizzare manualmente frammenti di codice reali!

Tuttavia, se stai utilizzando un mix di heredocs e nowdocs per blocchi di contenuto di stringhe, che è facile tentare di cadere, potresti facilmente incontrare problemi XSS (cross site scripting) where mai usi heredoc! In quanto tale, questo approccio non è abbastanza pulito per me da consigliare a uno sviluppatore di iniziare con PHP! Invece, dovresti provare a utilizzare i templates (di qualsiasi tipo, o qualsiasi motore di template che ti piace), per questi grandi blocchi di informazioni. Dopotutto, non vuoi il codice HTML nel tuo php e, naturalmente, non vuoi che javascript immesso dall'utente, come:

 $username = '<script>alert(document.cookie.toString())</script>'; $insecure_example = <<<HERE I really like having my site exploited, $username HERE; 

Quindi non usare HEREDOCS e NOWDOCS al posto di un adeguato approccio di template o di un motore di template.

heredocs
1. il text heredocs si comport proprio come una string double citazione, senza le virgolette doppie.
2. Le virgolette in un heredoc non devono essere sottoposte a escape, ma i codici di escape \ n linefeed,
\ r return carrello, \ t scheda orizzontale, \ v scheda verticale, \ e fuga, \ f module avanzamento, \ backslash, \ $ segno di dollaro, \ "doppio preventsvo possono ancora essere utilizzati. Le variables vengono espanse, ma la stessa cura deve essere presa quando si esprimono variables complesse all'interno di un heredoc come con le stringhe.

Esempio :

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

nowdocs
1. il text nowdocs si comport come una string con quotatura singola, senza le virgolette singole.
2. Le virgolette in un nowdocs non hanno bisogno di essere sfuggite . Le variables non sono espanse. Vantaggio di nowdocs è l'integrazione del codice PHP e dei codici di escape senza necessità di escape.

Esempio :

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

Sintassi : un nowdoc viene identificato con la stessa sequenza <<< utilizzata per heredocs, ma l'identificatore che segue è racchiuso tra virgolette singole, ad es. <<< 'NOWDOC'. Tutte le regole per gli identificatori heredoc si applicano anche agli identificatori nowdoc, in particolare quelli relativi all'aspetto dell'identificatore di chiusura.