字符串
------------恢复内容开始------------ 一。二进制安全 数据写入时是什么样子,读出来就是什么样子,这称为二进制安全。 c语言的字符串不是二进制安全的,以\0为结束符,只能存储文本数据,不能存储图片音频等二进制数据。 举例 string.c 文件 运行后得出如下结果, a和b是相等的,长度是3,而显然a和b是不想等的,长度也应该为5,这是因为c的字符串以\0为结束符 PHP的字符串是二进制安全的,看一下PHP的代码,$a和$b是不想等的,而且长度为5 PHP实现二进制安全的主要原因是zend_string结构体的重新封装,直接以长度len来直接全部读取出来。 二。双引号和单引号转义的区别 先看上面二进制安全的例子,同一个字符串,单引号和双引号得出的结果却不一样 先查看 transfer_string.php 文件 接着调试查看存储的值为: "<?php\n$a = 'abc\\0a';\n$b = \"abc\\0a\";\n" , 这里\\即为\,\"即为",\0也是字符,为空字符。 在读取到存储的值后,会经过词法解释生成AST树,这里只简单说一下过程。 在解释到单引号时,从第一个单引号读到下一个单引号结束,中间直接返回zend_string,即字符串。 而双引号和单引号过程一样,但中间的字符会进入到zend