合规国际互联网加速 OSASE为企业客户提供高速稳定SD-WAN国际加速解决方案。 广告
## 字符串(string) 一个字符串就是由一系列的字符组成,其中每个字符等同于一个字节。这意味着 PHP 只能支持 256 的字符集,因此不支持 unicode 。[详见字符串类型详解](http://php.net/manual/zh/language.types.string.php#language.types.string.details) 一个字符串可以用 4 种方式表达: * 单引号 * 双引号 * heredoc * nowdoc ### 单引号 要表达一个单引号自身,需在它的前面加个反斜线(\)来转义。要表达一个反斜线自身,则用两个反斜线(\\)。其它任何方式的反斜线都会被当成反斜线本身:也就是说如果想使用其它转义序列例如 \r 或者 \n,并不代表任何特殊含义,就单纯是这两个字符本身。 > **Note:** 不像双引号和 heredoc 语法结构,在单引号字符串中的变量和特殊字符的转义序列将不会被替换。 ``` <?php echo 'this is a simple string'; // 输出: Arnold once said: "I'll be back" echo 'Arnold once said: "I\'ll be back"'; // 输出: You deleted C:\*.*? echo 'You deleted C:\\*.*?'; // 输出: You deleted C:\*.*? echo 'You deleted C:\*.*?'; // 输出: This will not expand: \n a newline echo 'This will not expand: \n a newline'; // 输出: Variables do not $expand $either echo 'Variables do not $expand $either'; ?> ``` ### 双引号 如果字符串是包围在双引号(")中, PHP 将对一些特殊的字符进行解析: | 序列 | 含义 | | --- | --- | | \n | 换行 | | \r | 回车 | | \t | 水平制表符 | | \v | 垂直制表符 | | \e | Escape | | \f | 换页 | | \\ | 反斜线 | | \$ | 美元标记 | | \" | 双引号 | **注意:** 用双引号定义的字符串最重要的特征是变量会被解析 ``` <?php echo "hello world"; echo "hello world \r\n, today is hot.\r\n"; $name = 'kate green'; // 输出:My name is kate green echo "My name is $name"; // 输出:My name is kate green echo "My name is {$name}"; // 推荐这种方式 // 输出:My name is $name echo "My name is \$name"; ?> ``` ### heredoc heredoc 句法结构:`<<<` 在该运算符之后要提供一个标识符,然后换行。接下来是字符串 string 本身,最后要用前面定义的标识符作为结束标志。 **注意:** 结束时所引用的标识符必须在该行的第一列 ``` <?php $str = <<<EOT Example of string spanning multiple lines using heredoc syntax. EOT; ?> ``` ``` <?php $name = 'kate green'; $age = 12; $country = 'England'; $str = <<<EOT My name is {$name}, I am {$age} years old, I am from {$country}. EOT; ?> ``` heredoc 结构就象是没有使用双引号的双引号字符串,这就是说在 heredoc 结构中单引号不用被转义,但是上文中列出的转义序列还可以使用,变量将被替换。 ### nowdoc 一个 nowdoc 结构也用和 heredocs 结构一样的标记 `<<<`, 但是跟在后面的标识符要用单引号括起来。heredoc 结构的所有规则也同样适用于 nowdoc 结构,尤其是结束标识符的规则。 ``` <?php $name = 'kate green'; $age = 12; $country = 'England'; $str = <<<‘EOT’ My name is {$name}, I am {$age} years old, I am from {$country}. EOT; ?> ``` nowdoc 结构就象是没有使用单引号的单引号字符串,这就是说在 nowdoc 结构中不会进行解析操作,特殊字符不会转义,变量不会被替换。 ### 转换为字符型 一个值可以通过在其前面加上 (string) 或用 strval() 函数来转变成字符串。在一个需要字符串的表达式中,会自动转换为 string。 ``` <?php $str = (string) 12345; var_dump($str); // string(5) "12345" $str = (string) 123.45; var_dump($str); // string(6) "123.45" $bool = true; var_dump((string) $bool); // string(1) "1" $bool = false; var_dump((string) $bool); // string(0) "" ?> ``` ### 变量解析 当字符串用双引号或 heredoc 结构定义时,其中的变量将会被解析。 ``` <?php $name = 'kate green'; echo "My name is {$name}"; $user = array('name' => 'kate green', 'age' => 12); echo "My name is {$user['name']}, I am {$user['age']} years old."; $user = new object(); $user->name = 'kate green'; $user->age = 12; echo "My name is {$user->name}, I am {$user->age} years old."; ?> ``` ### 字符串运算符 有两个字符串运算符。第一个是连接运算符(“.”),它返回其左右参数连接后的字符串。第二个是连接赋值运算符(“.=”),它将右边参数附加到左边的参数之后。更多信息见赋值运算符。 ``` <?php $a = "Hello "; $b = $a . "World!"; // now $b contains "Hello World!" $a = "Hello "; $a .= "World!"; // now $a contains "Hello World!" ?> ``` ### 实用函数 PHP内置了非常丰富的字符函数,请参考:[字符串函数](http://php.net/manual/zh/ref.strings.php)