什么是字符串? 答:字符串,就是一串字符
1:如何声明一个字符串变量 答: 双引号 单引号 定界符
用双引号,来声明字符串的时候, 内部不能再出现双引号,
因为,双引号被当成字符串的"边界"来对待, 因此,内部出现双引号,就引起了解释上的歧义.
这时,可以用转义字符,即,用\" 转义 来表示 "
还有没有其他的转义字符呢? 想: \", 被用来当成 " 理解了. 那我要是确实想表示 反斜线\, 又怎么办呢?,
答: 用\\, 表示 反斜线\
还有没有其他的转义字符呢? 答:有 \n, \r, \$,等
\n 转义成 换行符 \r 转义成 回车符
转义上的区别: 单引号,系统不做复杂的转义, 只转义\',\\, 其他的---一律原样输出.
双引号,则转义的比较多,\",\\,\r,\n,\t,\$等.
对于变量解释的区别: 单引号,不对字符串的$作变量名解析, 而双引号,会试着$理解成变量名,来解析.
2:单双引号定义字符串,哪个速度更快一些? 答:单引号解析的更快,因为不需要进行过多的转义和变量解析
问:什么时间选用单/双引号呢? /* 答:大段文本,比如新闻标题,文本内容,自我介绍等这样大段话, 用',解析快.
但有时候,确实需要在一段字符串夹杂变量, 比如拼凑sql语句时
$id = 5;
$sql = "select * from user where id = $id";
如果此时用单引,则语句成为了 ..id= $id,sql就出错了. // 此时,用双引合适. 解析$id,语句解析成 ..id = 5;
当需要写一大段文本,好多行,里面又有单引号,又有双引号,导致转义的时候,都比较麻烦.
还可以用heredoc, nowdoc两种界定字符串的方式
$age = 29;
$str = <<<cont
我来写一行,
再来第2行, ' " \,
dsafd abc \t \r\n haha
$age
cont;
echo $str;
/** heredoc的写法
<<<标识符
中间写大段的文本
标识符;
注意:
1:标识符的名称和变量名的要求一样.
2:heredoc的标识符,一定是独占一行,而且前面没有任何其他字符.
3:heredoc对文本的处理,和 双引号一样,即\r\n\t,变量,等,能解析出来. **/
// heredoc写大段文本挺方便,但是对内部的字符解析,和双引号一样.
如果我不想这样,有没有类似heredoc写大段文本, 但是,对文本的解析又像 单引号那样简单.有没有这样的用法呢?
答: 有,到了5.3.0之后, 又新增了nowdoc方式,能达到如上效果.
$str = <<<'cont'
我来写一行, 再来第2行,
' " \, dsafd
abc \t \r\n
haha $age
cont;
echo $str;
/*** nowdoc写法和heredoc一样,唯独在标识符两边用单引号包起来, 这样,大段文本的解析,就和单引号一样的效果.
不转义 \n \r \t,变量等等 ***/
strlen 是计算字符串"字节"长度 mb_strlen,是根据编码,计算字符串的"字符"个数.
浙公网安备 33010602011771号