首页 » Web前端 » php代码浏览技巧_PHP源码阅读trimrtrimltrim 函数

php代码浏览技巧_PHP源码阅读trimrtrimltrim 函数

访客 2024-11-02 0

扫一扫用手机浏览

文章目录 [+]

trim

string trim ( string $str [, string $character_mask = \"大众 tnrx0B\公众 ] )

php代码浏览技巧_PHP源码阅读trimrtrimltrim 函数

参数解释

php代码浏览技巧_PHP源码阅读trimrtrimltrim 函数
(图片来自网络侵删)

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

利用..可以指定一段范围的字符。
此处要把稳,”..”旁边两边是一对合法的范围值,如果通报的是非法的值会报错。

运行示例

先来看看用正常的利用

$str = 'hello..';

$new_str = trim($str,'.');// 结果是hello

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

$str = 'hello...';

$second_str = trim($str,'...');// 报错

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

$str = 'helloabcdefg';

$new_str = trim($str,'a..g');// 输出hello

trim实行步骤

trim、ltrim、rtrim三个函数都是调用了php_do_trim函数,差异在于第二个参数mode的不同。
本文紧张对trim函数进行剖析,ltrim和rtrim函数跟trim的类似。
然后php_do_trim会调用了php_trim来实现功能,因此trim函数的核心函数时php_trim函数。
其实行步骤如下:

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

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

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

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

源码解读

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

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

if(mode & 1){

for(i = 0;i < len;i++){

if(mask[(unsignedchar)c[i]]){

trimmed++;

}else{

break;

}

}

len -= trimmed;

c += trimmed;

}

if(mode & 2){

for(i = len - 1;i >= 0;i--){

if(mask[(unsignedchar)c[i]]){

len--;

}else{

break;

}

}

}

判断的过程:

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

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

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

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

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

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

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

小结

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

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

原创文章,文笔有限,才疏学浅,文中若有不正之处,万望奉告。

如果本文对你有帮助,请点下推举吧,感激^_^

末了再安利一下,我在github有对PHP源码更详细的表明。
感兴趣的可以围不雅观一下,给个star。
PHP5.4源码表明。
可以通过commit记录查看已添加的表明。

标签:

相关文章

房山第一探寻历史文化名区的魅力与发展

房山区,位于北京市西南部,历史悠久,文化底蕴深厚。作为北京市的一个重要组成部分,房山区的发展始终与首都的发展紧密相连。房山区积极推...

Web前端 2025-02-18 阅读1 评论0

手机话费开钻代码数字时代的便捷生活

我们的生活越来越离不开手机。手机话费作为手机使用过程中的重要组成部分,其充值方式也在不断创新。手机话费开钻代码应运而生,为用户提供...

Web前端 2025-02-18 阅读1 评论0

探寻专业奥秘如何查询自己专业的代码

计算机科学已成为当今社会不可或缺的一部分。掌握一门专业代码对于个人发展具有重要意义。面对繁杂的学科体系,如何查询自己专业的代码成为...

Web前端 2025-02-18 阅读1 评论0