使用字符串过程中,最让人纠结的问题应该属下面这两个: 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学习笔记