使用字符串过程中,最让人纠结的问题应该属下面这两个:
1、单引号和双引号的区别
2、关于单双引号的转义
下面就详细说说这两个问题,
1、单引号和双引号的区别
(1)单引号内部不存在特殊字符,所有字符(除了单引号本身\'和转义符\\需要转义),都会原样输出,因此也是字符串定义是的首选。
(2)双引号内部存在特殊字符,比如$var = 10; echo "$var",这个时候双引号内部的变量$var会输出值10,而不是直接输出$var这几个字眼。另外,双引号内部还可以通过转义实现很多特殊字符的输入,比如"\n"输出换行符,"\t"输出tab字符等,具体参考手册,这里就不详细列举。
大家在使用过程中,针对性得选用一种,习惯了,对两者的区分度就会清晰了,比如我就比较喜欢使用单引号,除非需要输出特殊字符才使用双引号。
2、关于单双引号中的转义
(1)它们自己本身和转义符需要转义
(2)双引号中的特殊字符需要转义
使用技巧,每次定义字符串的时候,先写好字符串的前后,
如$var = ''; 或者 $var = "";
然后,再往里面填充内容,遇到本身或转义字符,或者双引号遇到特殊字符,则加入转义符,
如单引号:$var = 'Hello everybody, I\'m Zjmainstay.'; 当内容写到'的时候,我们发现它是单引号本身,则立刻加入转义符,使之成为\'。
或者是双引号:$var = "I say \"Yes\"."; 当内容写到"的时候加入转义,使之成为\"。
另外,如果发现字符串中只会出现单引号或双引号中的一种,我们可以选择规避的方式避开转义,如上面的两个可以规避写成:
(1)$var = "Hello everybody, I'm Zjmainstay";
(2)$var = 'I say "Yes"';
也就是使用单引号字符串来包含只有双引号的内容,而使用双引号字符串来包含只有单引号的内容。
当出现字符串拼接的时候,我们需要首先闭合,然后再拼接,就会避免不必要的语法错误,如:
(1)$var = '';
(2)$var = '<span></span>';
(3)$var = '<span>''</span>';
(4)$var = '<span>'..'</span>';
(5)$var = '<span>'. $data .'</span>';
说到字符串拼接,还需要介绍一个函数:sprintf
语法:string sprintf ( string $format [, mixed $args [, mixed $... ]] )
这个函数可以帮我们把字符串的拼接简单化,比如:
$var = '<a href="' . $href . '" title="'. $title .'">'. $title .'</a>';
对比:
$var = sprintf('<a href="/%s" title="%s">%s</a>', $href, $title, $title);
从左到右,每个变量填充一个%s,数量必须配对,否则会有错误。
这么写的好处是看起来是一个完整的a标签,然后只是需要填入数据的地方使用了%s替代。%s表示字符串类型,还有%d、%f等类型,大家看手册中的介绍。
与sprintf相近的是vsprintf,这个是传入数组,如:
$data = array($href, $title, $title);
$var = sprintf('<a href="/%s" title="%s">%s</a>', $data);
它在后面参数比较多或者得到数据正好是数组的时候使用,这个大家有个概念就行了。
除了单引号和双引号之外,还有两种字符串写法:
(1)heredoc结构
$str = <<<HEREDOC
String here.
HEREDOC;
(2)nowdoc 语法结构 (自PHP 5.3.0以后)
$str = <<<'NOWDOC'
String here.
NOWDOC;
HEREDOC 和 'NOWDOC'部分随意命名,首尾对应即可。
heredoc的语法类似双引号,nowdoc的类似单引号。
需要注意的一点是,这两种写法有点“洁癖”,如:
$str = <<<EOD
String here.
EOD;
(1)在<<<EOD后面不能有任意字符(包括空格)
(2)在EOD;前后都不能有任意字符(包括空格)
nowdoc的一样,这里不再举例。
基于字符串的重要性,请大家学习完本文内容后,查看手册中所有已str_开头的函数,熟悉他们的用法,有不理解的,在下面留言。
未经同意禁止转载!
转载请附带本文原文地址:PHP字符串,首发自 Zjmainstay学习笔记




