php字符串中的heredoc和nowdoc

作者

php中字符串,有四种表示方式。分别是 单引号字符串双引号字符串heredoc字符串nowdoc字符串。也是就是php的字符串有四种可以表达方式。

php-heredoc-nowdoc
php-heredoc-nowdoc

php中字符串通常是放在引号中间的,单引号或者双引号。这里就一个问题,引号该怎么存储。答案就是使用转义字符。比如使用单引号方式,字符串里存储一个单引号,就可以$str='\''这样写。 一个反斜杠加上一个单引号字符,在单引号方式中就表示一个单引号。如果是放到双引号中,可以 $str="'" 这样写,因为没有字符的冲突。可见,不同的表示方式,最终的解释是不同的。这也是这几种表示方法的差异。

php字符串的四种表达方式

  1. 单引号方式 -- 只有单引号字符和反斜线需要转义,其他的字符都不用转义。
  2. 双引号方式 -- 双引号字符串,变量会被解析,同时会有一些特殊的解析。

    \n 换行(ASCII 字符集中的 LF 或 0x0A (10))
    \r 回车(ASCII 字符集中的 CR 或 0x0D (13))
    \t 水平制表符(ASCII 字符集中的 HT 或 0x09 (9))
    \v 垂直制表符(ASCII 字符集中的 VT 或 0x0B (11))(自 PHP 5.2.5 起)
    \e Escape(ASCII 字符集中的 ESC 或 0x1B (27))(自 PHP 5.4.0 起)
    \f 换页(ASCII 字符集中的 FF 或 0x0C (12))(自 PHP 5.2.5 起)
    \ 反斜线
    \$ 美元标记
    \" 双引号
    [0-7]{1,3} 符合该正则表达式序列的是一个以八进制方式来表达的字符
    \x[0-9A-Fa-f]{1,2} 符合该正则表达式序列的是一个以十六进制方式来表达的字符、

  3. heredoc 方式-- 单引号和单独的反斜线本身不会解析,如果反斜线和之后的组合符合,双引号中的解析规则,也会执行特殊的解析。给 双引号的处理规则类似。

  4. nowdoc 方式 -- 解析的方式给单引号方式类似。

heredoc 和 nowdoc 的语法

heredoc 开始行有三个左尖括号加一个标识符组成, 结束行只有标识符,前后无空格,作为php的一条语句,最后的分号是不能少的。
heredoc的示例

$test = 'this is test';

$str = <<<EOT
string  -- $test
// 这里不是注释,会被输出
这个单独的一行
EOT;

最终输出的结果

string  -- this is test
// 这里不是注释,会被输出
这个单独的一行

nowdoc和heredoc的区别是,语法上,开始行的标识符需要用单引号包括起来。结束标志是相同的。
nowdoc的示例

$test = 'this is test';
$str = <<<'EOT'
string  -- $test -- 这里的 $test不会被解析
// 这里不是注释,会被输出
这个单独的一行 \n\n\n
EOT;
echo $str;

输出的结果

string  -- $test -- 这里的 $test不会被解析
这里不是注释,会被输出
这个单独的一行 \n\n\n

nowdoc和heredoc的最大区别是就不解析变量和符合双引号转义规则的字符组合。

回复

电子邮件地址不会被公开。