PHP与MySQL高性能应用开发
上QQ阅读APP看书,第一时间看更新

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语句等具有很实用的价值。