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

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PHP内核探索之变量-不平凡的字符串课件

切,一个字符串有什么好研究的。 别这么说,看过《平凡的世界》么,平凡的字符串也可以有不平凡的故事。试看: (1)?????? 在C语言中,strlen计算字符串的时间复杂度是?PHP中呢? (2)?????? 在PHP中,怎样处理多字节字符串?PHP对unicode的支持如何? 同样是字符串,为什么c语言与C++/PHP/Java的均不相同? 数据结构决定算法,这句话一点不假。 那么我们今天就来掰一掰,PHP中的字符串结构,以及相关字符串函数的实现。 一、? 字符串基础   字符串可以说是PHP中遇到最多的数据结构之一了(另外一个比较常用的是数组,见 HYPERLINK /ohmygirl/p/internal-4.html \t _blank 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的,因此不会解析单引号中的变量,控制字符等: 1 2 3$string ?=?test; $str ?=?this is $string, aha\n; echo ?$str;(3)???? Heredoc Heredoc比较适合较长的字符串表示,且对于多行的字符串表示更加灵活多样。与双引号表示形式类似,heredoc中也可以包含变量。常见的形式是: 1 2 3 4 5 6 7$string ?=test string; $str ?= STR This is a string \n, My string is? $string STR; ? echo ?$str;(4)???? nowdoc(5.3+支持) nowdoc和heredoc是如此的类似,以至于我们可以把它们当做是一对儿亲兄弟。nowdoc的起始标志符是用单引号括起来的,与单引号相似,它不会解析其中的变量,格式控制符等: 1 2 3 4 5 6$s ?= EOT this is?$str this is \t test; EOT; ? echo ?$s;2.?????? PHP中字符串的结构 ?  之前提到过,PHP中变量是用Zval( HYPERLINK /ohmygirl/p/internal-variable-1.html \t _blank 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语言中,一个字符串可以用两种常见的形式存储,一种是使用指针方式

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档