字符串(string)是由若干字符组成的序列。string有4种表示方法:单引号、双引号、heredoc、nowdoc,它们的区别如表2-6所示。
表2-6 字符串的表示方法
题目描述: 如何从string中取出其中的单个字符。
可以用下标取出当前位置的字符,并支持修改。
程序代码如下:(源码文件:ch02/string_index.php)
<?php $str = 'hello'; echo $str[0]; //Output h $str[1] = 'a'; echo $str; //Output hallo
题目描述: 字符串所能表示的最大长度是多少?
PHP 7之前的版本(5.x),string所能表示的最大长度为2GB。PHP 7之后,字符串就没有这种限制了。出现这种情况的原因,是因为PHP底层对于字符串设计的改变。
PHP 5.x的结构如下:
可以看到,字符串的长度被放到一个4字节的int里,而int所能表示的最大数字为2 31 -1。
而PHP 7里,string的内部结构如下:
字符串的长度是size_t,而size_t与机器位数有关。在64位机器上,size_t为8个字节,所能表示的最大数字为2 64 。
题目描述: 如何反转一个字符串,例如将“hello”转化为“olleh”。
这是一道比较简单的题目,但也需要考虑性能问题。最简单的实现方法,是从尾到头遍历字符串,并拼接起来。
程序代码如下:(源码文件:ch02/reverse_string_v1.php)
以上代码从结果来看,并没有问题。但要注意考虑以下两点:
对于Java、PHP等语言,字符串每次赋值都会生成临时字符串,造成内存浪费。在第8行,每一次拼接都会产生临时字符串。
事实上,对一个长度为n的字符串,不需要从头到尾遍历n次,而只需找到中间位置,交换与中心对称位置的字符。基于这些考虑,我们可以写出更好的实现方式。
程序代码如下:(源码文件:ch02/reverse_string_v2.php)