- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
切,一个字符串有什么好研究的。别这么说,看过《平凡的世界》么,平凡的字符串也可以有不平凡的故事。试看:(1) 在C语言中,strlen计算字符串的时间复杂度是?PHP中呢?(2) 在PHP中,怎样处理多字节字符串?PHP对unicode的支持如何?同样是字符串,为什么c语言与C++/PHP/Java的均不相同?数据结构决定算法,这句话一点不假。那么我们今天就来掰一掰,PHP中的字符串结构,以及相关字符串函数的实现。一、 字符串基础 字符串可以说是PHP中遇到最多的数据结构之一了(另外一个比较常用的是数组,见/ohmygirl/p/internal-4.htmlPHP内核探索之变量(4)- 数组操作)。而由于PHP语言的特性和应用场景,使得我们日常的很多工作,实际上都是在处理字符串。也正是这个原因,PHP为开发者提供了丰富的字符串操作函数(初步统计约有100个,这个数量相当可观)。那么,在PHP中,字符串是怎样实现的呢?与C语言又有什么区别呢? 1. PHP中字符串的表现形式 在PHP中使用字符串有四种常见的形式:(1)双引号 这种形式比较常见:$str=”this is \0 a string”; 而且以双引号包含的字符串中可以包含变量、控制字符等:$str = this is $name, aha.\n;(2)单引号 单引号包含的字符都被认为是raw的,因此不会解析单引号中的变量,控制字符等:123$string ?=?test;$str ?=?this is $string, aha\n;echo ?$str;(3)???? HeredocHeredoc比较适合较长的字符串表示,且对于多行的字符串表示更加灵活多样。与双引号表示形式类似,heredoc中也可以包含变量。常见的形式是:1234567$string ?=test string;$str ?= STRThis is a string \n,My string is? $stringSTR;?echo ?$str;(4)???? nowdoc(5.3+支持)nowdoc和heredoc是如此的类似,以至于我们可以把它们当做是一对儿亲兄弟。nowdoc的起始标志符是用单引号括起来的,与单引号相似,它不会解析其中的变量,格式控制符等:123456$s ?= EOTthis is?$strthis is \t test;EOT;?echo ?$s;2.?????? PHP中字符串的结构? 之前提到过,PHP中变量是用Zval(/ohmygirl/p/internal-variable-1.htmlPHP内核探索之变量(1)Zval)这样一个结构体来存储的。Zval的结构是:struct _zval_struct { zvalue_value value;/* value */ zend_uint refcount__gc;/* variable ref count */ zend_uchar type;/* active type */ zend_uchar is_ref__gc;/* if it is a ref variable */}; 而变量的值是zvalue_value这样一个共用体:typedef union _zvalue_value { long lval; double dval; struct {/* string */ char *val; int len; } str; HashTable *ht; zend_object_value obj;} zvalue_value;我们从中抽取出字符串的结构:struct { char *val; int len;} str;现在比较清楚了,PHP中字符串在底层实际上是一个结构体,该结构体包含了指向字符串的指针和该字符串的长度。那么为什么这么做呢?换句话说,这样做有什么好处呢?我们接下来,将PHP的字符串与C语言的字符串做一个对比,以解释采用这样一种结构来存储字符串的优势。3. 与c语言字符串的比较 我们知道,在c语言中,一个字符串可以用两种常见的形式存储,一种是使用指针方式,另一种是使用字符数组。我们接下来的说明,都以c语言的字符数组的方式来存储字符串。(1)??PHP字符串是二进制安全的,而C字符串不是。 我们经常会提到”二进制安全”这一术语,那么二进制安全究竟是什么意思呢? wikipedia中对二进制安全(Binary Safe)的定义是:Binary-safe is a computer programming term mainly used in connection with string manipulating functions. A binary-safe function is e
您可能关注的文档
最近下载
- 送货单模板[共1页].doc VIP
- (高清版)B-T 9797-2022 金属及其他无机覆盖层 镍、镍+铬、铜+镍和铜+镍+铬电镀层.pdf VIP
- 学校学师德问题报告制度.docx VIP
- 精品解析:2024年四川省绵阳市中考数学一诊试题(原卷版).docx VIP
- (统编版2024新教材)语文一年级上册全册《字音辨析》知识点+练习(含答案).docx
- 水果店的创业计划书.docx VIP
- 传染病报告卡最新版本.doc VIP
- [入党个人自传格式]入党个人自传范文.doc VIP
- (新版)消防设施操作员(基础知识)考试题库(完整版).docx VIP
- - 麻纤维的形成 及特性 - 棉纤维的形成 及特性 - .ppt VIP
原创力文档


文档评论(0)