WithCoderWithCoderWithCoder

PHP数据类型——String字符串

    在PHP中,一个字符串 string 就是由一系列的字符组成,其中每个字符等同于一个字节。string 最大可以达到 2GB。

    PHP中的一个字符串可以用以下4 种方式表达:

  • 单引号

  • 双引号

  • heredoc 语法结构

  • nowdoc 语法结构(自 PHP 5.3.0 起)

    单引号 

    定义一个字符串的最简单的方法是用单引号把它包围起来(字符 ')。

    注意:

    1. 如果要表达一个单引号自身,需在它的前面加个反斜线(\)来转义。要表达一个反斜线自身,则用两个反斜线(\\)。其它任何方式的反斜线都会被当成反斜线本身:就是说如果想使用其它转义序列例如 \r 或者 \n,并不代表任何特殊含义,就单纯是这两个字符本身

    2. 不像双引号和 heredoc 语法结构,在单引号字符串中的变量和特殊字符的转义序列将不会被替换   

<?php
echo 'Hello world';

echo '<br>';
// 可以入多行
echo 'Hello
   world';

echo '<br>';
// 在字符串中使用,需要转义(\')
echo 'Hello \'world\'';

echo '<br>';
// 在字符串中使用\,需要转义(\\)
echo 'C:\\windows';

echo '<br>';
// 其他\的字符不转义
echo 'C:\*';

echo '<br>';
// 出: This will not expand: \n a newline
echo 'This will not expand: \n a newline';

echo '<br>';
$name = 'neil';
// 量不被替
echo 'hello $name';

    双引号 

    定义字符串的第二种方式是使用双引号(")。

    注意:

    1.如果字符串是包围在双引号(")中, PHP 将对一些特殊的字符进行解析:   

转义字符
序列含义
\n换行(ASCII 字符集中的 LF 或 0x0A (10))
\r回车(ASCII 字符集中的 CR 或 0x0D (13))
\t水平制表符(ASCII 字符集中的 HT 或 0x09 (9))
\v垂直制表符(ASCII 字符集中的 VT 或 0x0B (11))(自 PHP 5.2.5 起)
\eEscape(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}符合该正则表达式序列的是一个以十六进制方式来表达的字符

    除以上特殊字符外,和单引号字符串一样,转义任何其它字符都会导致反斜线被显示出来

    2. 用双引号定义的字符串最重要的特征是变量会被解析   

<?php
echo "Hello world";

echo '<br>';
// 在字符串中使用,需要转义(\')
echo "Hello \"world\"";

echo '<br>';
// 在字符串中使用\,需要转义(\\)
echo "C:\\windows";

echo '<br>';
// 其他\的字符不转义
echo "C:\*";

echo '<br>';
$name = 'neil';
// 被替
echo "hello $name";

    Heredoc 结构

    第三种表达字符串的方法是用 heredoc 句法结构:<<<。

    在该运算符之后要提供一个标识符,然后换行。接下来是字符串 string 本身,最后要用前面定义的标识符作为结束标志。

    结束时所引用的标识符必须在该行的第一列,而且,标识符的命名也要像其它标签一样遵守 PHP 的规则:只能包含字母、数字和下划线,并且必须以字母和下划线作为开头。

    注意:

    结束标识符这行除了可能有一个分号(;)外,绝对不能包含其它字符。这意味着标识符不能缩进,分号的前后也不能有任何空白或制表符。更重要的是结束标识符的前面必须是个被本地操作系统认可的换行,比如在 UNIX 和 Mac OS X 系统中是 \n,而结束定界符(可能其后有个分号)之后也必须紧跟一个换行。

    如果不遵守该规则导致结束标识不“干净”,PHP 将认为它不是结束标识符而继续寻找。如果在文件结束前也没有找到一个正确的结束标识符,PHP 将会在最后一行产生一个解析错误。

    Heredocs 结构不能用来初始化类的属性。自 PHP 5.3 起,此限制仅对 heredoc 包含变量时有效。

    Heredoc 结构就象是没有使用双引号的双引号字符串,这就是说在 heredoc 结构中单引号不用被转义,但是在上面双引号中列出的转义序列还可以使用。变量将被替换,但在 heredoc 结构中含有复杂的变量时要格外小心。   

<?php
$name = 'neil';
// heredoc结构部包含
$str = <<<STR
hello $name
STR;

echo $str;        

 以上代码不会解析变量,输出结果为:

    hello neil

    Nowdoc 结构

    就象 heredoc 结构类似于双引号字符串,Nowdoc 结构是类似于单引号字符串的

    Nowdoc 结构很象 heredoc 结构,但是 nowdoc 中不进行解析操作。这种结构很适合用于嵌入 PHP 代码或其它大段文本而无需对其中的特殊字符进行转义。与 SGML 的 <![CDATA[ ]]> 结构是用来声明大段的不用解析的文本类似,nowdoc 结构也有相同的特征。

    一个 nowdoc 结构也用和 heredocs 结构一样的标记 <<<, 但是跟在后面的标识符要用单引号括起来,即 <<<'EOT'。Heredoc 结构的所有规则也同样适用于 nowdoc 结构,尤其是结束标识符的规则。

<?php
$name = 'neil';
// heredoc结构部包含
$str = <<<'STR'
hello $name
STR;

echo $str;

     以上代码不会解析变量,输出结果为:

   hello $name

欢迎分享交流,转载请注明出处:WithCoder » PHP数据类型——String字符串