12.1 字符串的指定方法
使用GET或POST方式提交数据时,这些数据都会被封装成字符串类型的数据提交到WEB服务器;另外Session文件和Cookie文件中的数据也都是以字符串类型的数据进行保存的。作为WEB开发语言,PHP最常打交道的数据类型就是字符串。毫不夸张地说,字符串在PHP中占据着举足轻重的地位,对于开发者来说,处理字符串是一项非常基础的技能。
字符串最简单的指定方法是使用单引号(')或者双引号("),除此以外还可以使用定界符(Heredoc Syntax)指定字符串。
12.1.1 使用单引号指定字符串
使用单引号指定字符串时,除了两个特殊字符序列(\\和\')外,该字符串的内容将逐个字符进行处理。例如程序single.php如下。
<?php
$teacher = 'teacher';
$introduction = 'I\'m a $teacher\\n,you are a student.';
echo $introduction; //输出:I'm a $teacher\n,you are a student.
?>
12.1.2 使用双引号指定字符串
在PHP程序中,使用双引号指定字符串时,该字符串的内容将被预处理。当字符串中存在变量名(以$开头)时,变量名被变量值替代;当字符串中存在如表12-1所示的6个特殊字符序列时,字符序列被转义成对应的字符。例如程序double1.php如下。
<?php
$fruit = "苹果";
$old_string = "我喜欢吃$fruit<br/>";
$fruit = "桔子";
$new_string = "我更喜欢吃$fruit<br/>";
echo $old_string; //输出:我喜欢吃苹果
echo $new_string; //输出:我更喜欢吃桔子
?>
程序double1.php中,由于变量$old_string的值使用双引号指定为字符串类型的数据,PHP预处理器会将变量$old_string预处理,使用变量值“苹果”替代变量$fruit,然后PHP预处理器使用同样的方法将变量$new_string进行预处理。
双引号指定的字符串会花费PHP预处理器的处理时间,因此使用单引号指定字符串是一种良好的编程习惯。
如下程序double2.php中,双引号指定的字符串中存在特殊的字符序列。
<?php
$teacher = "teacher";
$introduction = "I\'m a $teacher\\n,you are a student.";
echo $introduction; //输出:I\'m a teacher\n,you are a student.
?>
如果双引号指定的字符串中存在变量名时,变量名应该从“$”开始,而变量名在哪个字符处结束有可能出现异议,例如,如下程序double3.php,该程序的运行结果如图12-1所示。
<?php
$sport = 'foot';
$plan = "I will play $sportball in the summertime.";
echo $plan;
?>
使用双引号指定字符串时,字符串序列“{$”和字符“}”之间的字符串可以用于表示变量名,该字符串最终被变量值替代,例如程序double4.php如下。
<?php
$sport = 'foot';
$plan = "I will play {$sport}ball in the summertime.";
echo $plan; //输出:I will play football in the summertime.
?>
12.1.3 使用定界符指定字符串
除了可以使用单引号和双引号指定字符串外,PHP还提供了定界符(Heredoc Syntax)指定字符串的方法。在指定一个文本块,尤其是包含了HTML的FORM表单的文本块时,使用定界符指定字符串非常便利。例如程序heredoc.php如下,该程序的运行结果如图12-2所示。
<?php
$name = "张三";
$submit = "提交";
$my_form = <<<form
<form>
用户名:<input type="text" name="name" value="$name"><br/>
密 码 :<input type="password" name="password"><br/>
<input type="submit" value="$submit"><br/>
</form>
form;
echo $my_form;
?>
使用定界符指定字符串说明如下。
(1)使用定界符指定字符串必须以3个左尖括号“<<<”开头。
(2)3个左尖括号后面为开始标识符,程序heredoc.php中为“form”;结束标识符必须和开始标识符相同,程序heredoc.php中同样为“form”。标识符的命名和变量名的命名方法相同。
(3)开始标识符和结束标识符中间的内容为文本块,文本块的内容将被预处理,且处理方式和使用双引号指定的字符串的处理方式相同。与使用双引号指定的字符串不同,使用定界符指定的字符串中允许包含双引号。
12.1.4 字符串中的字符处理
字符串是由零个或多个字符组成的有限序列,可以通过字符串的索引(index)检索字符串中的单个字符(index从0开始计数)。例如程序string_index.php如下,该程序的运行结果如图12-3所示。
<?php
$teacher = 'teacher';
for($index=0;$index<7;$index++){
$char = $teacher[$index];
echo $char;
}
echo "<br/>";
for($index=0;$index<7;$index++){
$char = $teacher{$index};
echo $char;
}
?>
字符串的索引(index)从0开始,检索字符串中的单个字符时可以使用“[index]”或“{index}”的方式取得该索引(index)对应的字符。