PHP 字符串:Nowdoc 3 个改进

在 PHP 中除了使用单引号(')或者双引号(")表示字符串是否还有其他的方式呢?有的,在 PHP 中表示字符串还可以使用 Heredoc 结构或者 Nowdoc 结构。本 wiki 主要介绍 Nowdoc

基础知识

语法结构

Nowdoc 的语法结构是:

<<< ' 标识符 '
    // 字符串 String
标识符 

标识符的命名

标识符的命名也要像其它标签一样遵守 PHP 的规则:只能包含字母、数字和下划线,并且必须以字母和下划线作为开头

相关性质

  1. 结束标识符这一行只能包含标识符和分号(;);
  2. 结束标识符的前面必须是个被本地操作系统认可的换行,比如在 UNIX 和 Mac OS X 系统中是 \n,而结束定界符(可能其后还有个分号)之后也必须紧跟一个换行,绝对不能包含其它字符。这意味着标识符不能缩进,分号的前后也不能有任何空白或制表符
  3. 如果不遵守 1 和 2 规则会导致 PHP 找不到结束标识符,在最后一行产生一个解析错误;
  4. Nowdoc 结构相当于单引号字符串,不支持解析特殊字符和变量名;
  5. 标识符可以自定义,一般教科书出现的有 EOT,EOD,EOF 等, 只要保持开始标识和结束标识一致即可。需要注意的是起始标识符需要使用单引号(')包含。

拓展

使用示例

例 1 —— 一般使用
<?php
$str = <<<'EOD'
这是一个句子,
这个句子有两行,
用 Heredoc 结构输出有多少行?
EOD;

/* 含有变量的更复杂示例 */
class Foo
{
    var $foo;
    var $bar;

    public function __construct()
    {
        $this->foo = '软件工程师';
        $this->bar = array('Hello', 'world', '!');
    }
}

$foo = new Foo();
$name = 'John';

echo <<<'EOT'
我的名字叫 "$name",我的工作是 $foo->foo 。
现在, 我正在奋力敲着代码 {$foo->bar[0]} {$foo->bar[1]} {$foo->bar[2]} 
转义 'A': \x41
EOT;

例 1 结果:

我的名字叫 "$name",我的工作是 $foo->foo 。 现在, 我正在奋力敲着代码 {$foo->bar[0]} {$foo->bar[1]} {$foo->bar[2]} 转义 'A': \\x41

从输出结果可以看出,PHP 在 Nowdoc 中不进行解析操作。因此,Nowdoc 适用于嵌入无需解析操作的大段文本。

参考

本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!