• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP内核探索之变量(七)- 不平凡的字符串

php 搞代码 3年前 (2022-01-24) 18次浏览 已收录 0个评论

PHP内核探索之变量(7)- 不平凡的字符串

切,一个字符串有什么好研究的。

别这么说,看过《平凡的世界》么,平凡的字符串也可以有不平凡的故事。试看:

(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的,因此不会解析单引号中的变量,控制字符等:

$string = "test";$str = 'this is $stri<i style="color:transparent">本#文来源gaodai$ma#com搞$$代**码网$</i><button>搞代gaodaima码</button>ng, aha\n';echo $str;

(3) Heredoc

Heredoc比较适合较长的字符串表示,且对于多行的字符串表示更加灵活多样。与双引号表示形式类似,heredoc中也可以包含变量。常见的形式是:

$string ="test string";$str = <<<STRThis is a string \n,My string is $stringSTR;echo $str;

(4) nowdoc(5.3+支持)

nowdoc和heredoc是如此的类似,以至于我们可以把它们当做是一对儿亲兄弟。nowdoc的起始标志符是用单引号括起来的,与单引号相似,它不会解析其中的变量,格式控制符等:

$s = <<<'EOT'this is $strthis is \t test;EOT;echo $s;

2. PHP中字符串的结构

  之前提到过,PHP中变量是用Zval(PHP内核探索之变量(1)Zval)这样一个结构体来存储的。Zval的结构是:

<span style="color: #000000">struct _zval_struct {    zvalue_value value;       </span><span style="color: #008000">/*</span><span style="color: #008000"> value </span><span style="color: #008000">*/</span><span style="color: #000000">    zend_uint refcount__gc;   </span><span style="color: #008000">/*</span><span style="color: #008000"> variable ref count </span><span style="color: #008000">*/</span><span style="color: #000000">    zend_uchar type;          </span><span style="color: #008000">/*</span><span style="color: #008000"> active type </span><span style="color: #008000">*/</span><span style="color: #000000">    zend_uchar is_ref__gc;    </span><span style="color: #008000">/*</span><span style="color: #008000"> if it is a ref variable </span><span style="color: #008000">*/</span><span style="color: #000000">};</span>


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP内核探索之变量(七)- 不平凡的字符串

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址