1.11 HereDoc与NowDoc
PHP的HereDoc以Linux系统的“原型文档”(here-document)语法为基础,它允许开发者在脚本中嵌入一段文本内容,如邮件模板、短信模板、HTML/JavaScript脚本等。
它是一种面向字符行的引用,所以定界符是针对行而不是字符,起始定界符是当前行,结束定界符是一个指定字符的行。如代码清单1-16所示:
代码清单1-16 HereDoc之声明
<? php echo<<<THIS_HEREDOC PHP stands for "PHP: Hypertext Preprocessor". The acronym "PHP" is therefore, usually referred to as a recursive acronym because thelong form contains the acronym itself. THIS_HEREDOC; ?>
可以看到这里以<<<THIS_HEREDOC开头,以THIS_HEREDOC结束,表示引用结束。
在<<<后面的名字可以是任何你喜欢的名称,比如可以用“HELLO”定义HereDoc开始,然后末尾就以“HELLO”表示HereDoc语句的结束。
在HereDoc中可以直接引用PHP变量(前提是该变量已经定义), HereDoc会解释该变量,直接显示该变量的值,为避免与其他文字混淆,可以用花括号将该变量括起来。如代码清单1-17所示:
代码清单1-17在HereDoc中引用PHP变量
<? php $output = "LAMP高性能开发"; $content = <<<THIS_HEREDOC 实践{$output} THIS_HEREDOC; ?>
注意,在使用HereDoc时,结束符之前的文字要与上面文字段落自然换行,不要用空格或TAB字符进行缩进操作,否则PHP会提示解析错误。
如果想在HereDoc内容中显示$打头的字符串,PHP会认为是一个变量,因为不是合法的标识会提示编译错误,需要进行转义操作。
如果我们使用PHP 5.3以上版本,就可以使用新的语法NowDoc了。它相当于HereDoc中内容都自动转义,文本中的内容包括变量都不会解析。
NowDoc源于HereDoc,语法和HereDoc相似,唯一区别是它使用单引号作为定界符,如代码清单1-18所示:
代码清单1-18 NowDoc的使用
<? php $religion = 'Hebrew'; $myString = <<'END_TEXT' "'I am a $religion, ' he cries - and then - 'I fear the Lord the God of Heaven who hath made the sea and the dry land! '" END_TEXT; echo "<pre> $myString</pre>"; ?>
NowDoc对包含的文本均不做任何解析。在输出时,里面的内容都当作纯文本,无论有没有PHP变量还是特殊字符,这非常适合文本中含有代码的内容,比如想在脚本中显示一段PHP源码、动态SQL语句等具有很实用的价值。