PHP内核探索之变量-不平凡的字符串解剖.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
切,一个字符串有什么好研究的。别这么说,看过《平凡的世界》么,平凡的字符串也可以有不平凡的故事。试看:(1)?????? 在C语言中,strlen计算字符串的时间复杂度是?PHP中呢?(2)?????? 在PHP中,怎样处理多字节字符串?PHP对unicode的支持如何?同样是字符串,为什么c语言与C++/PHP/Java的均不相同?数据结构决定算法,这句话一点不假。那么我们今天就来掰一掰,PHP中的字符串结构,以及相关字符串函数的实现。一、? 字符串基础  字符串可以说是PHP中遇到最多的数据结构之一了(另外一个比较常用的是数组,见PHP内核探索之变量(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(PHP内核探索之变量(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

文档评论(0)

希望之星 + 关注
实名认证
内容提供者

我是一名原创力文库的爱好者!从事自由职业!

1亿VIP精品文档

相关文档