上一篇文章中我們了解了php中的EOF,有需要的請(qǐng)看《heredoc是什么?它能為PHP做什么?》。這次我們向大家介紹nowdoc和heredoc的區(qū)別,有需要的可以參考參考。
在上一節(jié)中,小編給大家介紹了heredoc,似乎沒(méi)有介紹nowdoc。但其實(shí)不然,小編也給大家介紹了nowdoc,只不過(guò)小編沒(méi)有給大家說(shuō)這個(gè)名詞。但是我們還是來(lái)看一下nowdoc。
首先我們來(lái)看一個(gè)小栗子。
<?php $str = <<<'EOD' Example of string spanning multiple lines using nowdoc syntax. EOD; /* 含有變量的更復(fù)雜的示例 */ class foo { public $foo; public $bar; function foo() { $this->foo = 'Foo'; $this->bar = array('Bar1', 'Bar2', 'Bar3'); } } $foo = new foo(); $name = 'MyName'; echo <<<'EOT' My name is "$name". I am printing some $foo->foo. Now, I am printing some {$foo->bar[1]}. This should not print a capital 'A': x41 EOT; ?>
這樣看不明顯,我們將上一篇文章的例子拿過(guò)來(lái)對(duì)比一下。
<?php $name="runoob"; $a= <<<EOF "abc"$name "123" EOF; // 結(jié)束需要獨(dú)立一行且前后不能空格 echo $a; ?>
我們觀察一下這兩個(gè)例子,發(fā)現(xiàn)最大的區(qū)別是不是EOF這個(gè)單詞,在nowdoc中,它需要加上單引號(hào),而在heredoc中,它是不需要加引號(hào)的。
這就是我們直觀感覺(jué)到的區(qū)別啦,下面小編就來(lái)具體說(shuō)一下nowdoc和heredoc之間的區(qū)別。
heredoc使用<<< EOT標(biāo)識(shí)符,而nowdoc使用<<< 'EOT'標(biāo)識(shí)符。其中,nowdoc是php5.3引入的一項(xiàng)新技術(shù)。它包含了herdoc的語(yǔ)法,但是內(nèi)容永遠(yuǎn)不會(huì)被轉(zhuǎn)義和解釋。內(nèi)容是什么,它不會(huì)解析與PHP相關(guān)的內(nèi)容
heredoc中PHP的變量建議使用{$name->change()}
用大括號(hào)括起來(lái)可以避免一些歧義。如果要按原樣輸出,可以使用傳說(shuō)中的轉(zhuǎn)義字符,轉(zhuǎn)義字符本身可以使用轉(zhuǎn)義字符輸出,也就是說(shuō),這種表示方法、大括號(hào)等都需要轉(zhuǎn)義輸出。
為了確保可用性,建議將herdoc語(yǔ)法與escape一起使用。由于PHP5.3中引入了nowdoc語(yǔ)法,許多云托管環(huán)境可能不支持它,導(dǎo)致無(wú)法使用它。
最后,我想強(qiáng)調(diào)的是,herdoc是從php4.0引入的,而nowdoc語(yǔ)法需要版本5.3。因?yàn)閔erdeoc包含nowdoc的函數(shù),所以我建議使用herdeoc更好。
簡(jiǎn)單來(lái)說(shuō):
1、heredoc是動(dòng)態(tài)的,而nowdoc是靜態(tài)的
2、herdoc類(lèi)似于多行雙引號(hào),NewDoc類(lèi)似于多行單引號(hào)
3、heredoc是處理大字符串的通用處理方案,nowdoc是PHP實(shí)現(xiàn)的“高效”靜態(tài)版本,彌補(bǔ)了“Heredoc”動(dòng)態(tài)實(shí)現(xiàn)的效率。
就說(shuō)到這里了,有其他想知道的,可以點(diǎn)擊這個(gè)哦?!?→php視頻教程