- 1、本文档共24页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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语言中,一个字符串可以用两种常见的形式存储,一种是使用指针方式
您可能关注的文档
最近下载
- 作业设计研讨活动记录.doc
- 2025国家电投校园招聘笔试备考题库及答案解析.docx
- 2021-2022学年五年级上学期综合实践活动(劳动教育)第6课巧做糖画教案.docx
- 创业意识与创业技巧:了解企业登记注册流程.pptx
- 山东省淄博市2023年高一上学期《英语》期中试卷与参考答案.pdf
- 大学生职业规划大赛成长赛道 (修订).pptx
- 2018重庆市建设工程混凝土与砂浆配合比表.pdf
- WhyNothingWorks.doc VIP
- 住院医师规范化培训基地标准(2022年版)--皮肤科专业基地细则.docx
- JB∕T 2436.2-2020 导线用铜压接端头 第2部分:10mm2~300mm2导线用铜压接端头.pdf
文档评论(0)