课程咨询 :13623629309

太原PHP培训 > 达内新闻 > 太原php培训--PHP源码阅读:trim、rtrim、ltrim 函数
  • 太原php培训--PHP源码阅读:trim、rtrim、ltrim 函数

    发布:伯乐在线 - hoohack      来源:伯乐在线      时间:2016-06-03

  • trim 系列函数是用于去除字符串中首尾的空格或其他字符。ltrim 函数只去除掉字符串首部的字符,rtrim函数只去除字符串尾部的字符。

    trim

    太原php培训--PHP源码阅读:trim、rtrim、ltrim 函数

    参数说明

    character_mask默认是” tnrx0B”等空白字符。

    使用..可以指定一段范围的字符。此处要注意,”..”左右两边是一对合法的范围值,如果传递的是非法的值会报错。

    运行示例

    先来看看用正常的使用

    太原php培训--PHP源码阅读:trim、rtrim、ltrim 函数

    一个比较诡异的结果。这里报错是因为php..左右两边看作是范围值,而此处’..’左边是字符’.’PHP内部将认为其是一个缺少右边界的范围值。

    太原php培训--PHP源码阅读:trim、rtrim、ltrim 函数

    第二个参数使用合法的边界值:

    太原php培训--PHP源码阅读:trim、rtrim、ltrim 函数

    trim执行步骤

    trimltrimrtrim三个函数都是调用了php_do_trim函数,区别在于第二个参数mode的不同。本文主要对trim函数进行分析,ltrimrtrim函数跟trim的类似。然后php_do_trim会调用了php_trim来实现功能,因此trim函数的核心函数时php_trim函数。其执行步骤如下:

    1、根据what的值设置保存过滤字符的mask数组

    2、过滤在字符串首部的待过滤字符

    3、过滤在字符串尾部的待过滤字符

    php_trim函数执行的流程图如下:

    太原php培训--PHP源码阅读:trim、rtrim、ltrim 函数

    源码解读

    php_trim函数先调用了php_charmask,这个函数试将过滤字符设置为mask[char] = 1的形式,这样就是一个哈希数组,然后可用于后面的判断。如果第二个参数是范围值时,调用了memset函数给mask数组赋值。

    在用mode变量判断是哪种过滤时,此处有一个小优化,在PHP内部使用的是与运算,而不是多个的判断条件。该部分代码如下:

    太原php培训--PHP源码阅读:trim、rtrim、ltrim 函数

    判断的过程:

    1 && 1 == 1 左边需要过滤

    2 && 1 == 0 左边不需要过滤

    3 && 1 == 1 左边需要过滤

    1 && 2 == 0 右边不需要过滤

    2 && 2 == 1 右边需要过滤

    3 && 2 == 1 右边需要过滤

    像这样使用位操作可以提高程序的效率,而且代码更加简洁易读。

    小结

    阅读这个函数的源码,首先学习到在C语言中,如果需要做键值对数组,而且键值是单个字符,可以使用unsigned char的类型做数组下标,这样可以构造类似字符作为下标的映射数组。

    第二个就是使用位运算可以提高程序效率和代码可读性。

    好了,今天就给大家讲这么多吧,喜欢我的内容可以关注或者分享(微信公众平台:tytedu)选择太原达内培训,不再孤军奋战,轻轻松松做IT高薪白领。太原达内培训带领有明确目标的学子迈向成功之路!

上一篇:太原php培训--php设计模式-抽象工厂模式

下一篇:太原php培训--PHP在获取指定目录下的目录,在获取的目录下面再创建文件支持多平台

最新开班日期  |  更多

php高级开发名企定制班(剩2个名额)

php高级开发名企定制班(剩2个名额)

开班日期:12-29

php高级开发周末班(剩5个名额)

php高级开发周末班(剩5个名额)

开班日期:12-29

php高级开发免费试听(剩5个名额)

php高级开发免费试听(剩5个名额)

开班日期:12-29

更多高级开发工程师精品班

更多高级开发工程师精品班

开班日期:12-29

  • 地址:山西省太原市小店区学府街长治路高新国际A座24层
  • 课程培训电话:13623629309     全国服务监督电话:400-827-0010
  • 服务邮箱 ts@tedu.cn
  • 2001-2016 达内国际公司(TARENA INTERNATIONAL,INC.) 版权所有 京ICP证08000853号-56

    在线客服系统