简单谈谈PHP中strlen 函数


Posted in PHP onFebruary 27, 2016

strlen函数说明。

int strlen ( string $string )

在这篇文章,我们可以知道strlen函数是通过Zend Engine定义的。函数的定义可以在这里查看。

在这里也给出函数的源码:

ZEND_FUNCTION(strlen)
{
  char *s1;
  int s1_len;

  if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &s1, &s1_len) == FAILURE) {
    return;
  }

  RETVAL_LONG(s1_len);
}

该文章讲到,该函数很简单,并不需要进一步的解释。而这篇文章也有对zend_parse_parameters函数做介绍。笔者较笨,于是便想理解zend_parse_parameters函数是怎么返回变量长度的。

在zend_parse_arg_impl函数,就是解析参数的地方,我们继续看case 's'的分支。这个分支是对字符串变量的解析。

int *pl = va_arg(*va, int *);是字符串长度变量的定义。

继续往下看,可以看到对pl变量的赋值语句:*pl = Z_STRLEN_PP(arg);。

而Z_STRLEN_PP宏的定义在zend_operators.h文件中:

#define Z_STRLEN_PP(zval_pp)    Z_STRLEN(**zval_pp)

再继续看Z_STRLEN宏的定义,#define Z_STRLEN(zval)          (zval).value.str.len。由此我们可以知道,strlen函数是通过直接返回zval结构体中的str的len属性来实现的。

PHP 相关文章推荐
如何在php中正确的使用json
Aug 06 PHP
FireFox浏览器使用Javascript上传大文件
Oct 30 PHP
PHP制作百度词典查词采集器
Jan 29 PHP
php实现将任意进制数转换成10进制的方法
Apr 17 PHP
使用Composer安装Yii框架的方法
Mar 15 PHP
thinkPHP3.2简单实现文件上传的方法
May 16 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
May 19 PHP
PHP实现类似于C语言的文件读取及解析功能
Sep 01 PHP
PHP 计算两个时间段之间交集的天数示例
Oct 24 PHP
laravel框架模型和数据库基础操作实例详解
Jan 25 PHP
PHP使用openssl扩展实现加解密方法示例
Feb 20 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
Sep 15 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
Feb 26 #PHP
PHP文件缓存smarty模板应用实例分析
Feb 26 #PHP
PHP计算当前坐标3公里内4个角落的最大最小经纬度实例
Feb 26 #PHP
PHP实现根据时间戳获取周几的方法
Feb 26 #PHP
PHP将二维数组某一个字段相同的数组合并起来的方法
Feb 26 #PHP
关于PHP 如何用 curl 读取 HTTP chunked 数据
Feb 26 #PHP
PHP中array_keys和array_unique函数源码的分析
Feb 26 #PHP
You might like
简单谈谈php中ob_flush和flush的区别
2014/11/27 PHP
PHP获取指定时间段之间的 年,月,天,时,分,秒
2016/06/05 PHP
thinkphp框架使用JWTtoken的方法详解
2019/10/10 PHP
js获取当前select 元素值的代码
2010/04/19 Javascript
Jquery Ajax请求代码(2)
2011/01/07 Javascript
JQuery筛选器全系列介绍
2013/08/27 Javascript
jquery用data方法获取某个元素上的事件
2014/06/23 Javascript
JQuery做的一个简单的点灯游戏分享
2014/07/16 Javascript
使用JavaScript 编写简单计算器
2014/11/24 Javascript
通过node-mysql搭建Windows+Node.js+MySQL环境的教程
2016/03/01 Javascript
jQuery实现边框动态效果的实例代码
2016/09/23 Javascript
原生javascript实现的ajax异步封装功能示例
2016/11/03 Javascript
Vue.js对象转换实例
2017/06/07 Javascript
实现一个完整的Node.js RESTful API的示例
2017/09/29 Javascript
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
2018/01/02 Javascript
Angular 组件之间的交互的示例代码
2018/03/24 Javascript
vue实现标签云效果的方法详解
2019/08/28 Javascript
Node.js API详解之 vm模块用法实例分析
2020/05/27 Javascript
js中实现继承的五种方法
2021/01/25 Javascript
[01:16:50]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第一场 3月7日
2021/03/11 DOTA
Python中方法链的使用方法
2016/02/23 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
Python 常用的安装Module方式汇总
2017/05/06 Python
Python编程实现正则删除命令功能
2017/08/30 Python
python实现word 2007文档转换为pdf文件
2018/03/15 Python
Python实现的特征提取操作示例
2018/12/03 Python
Django集成搜索引擎Elasticserach的方法示例
2019/06/04 Python
OpenCV Python实现拼图小游戏
2020/03/23 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
2021/01/08 Python
python如何用matplotlib创建三维图表
2021/01/26 Python
土木工程应届生求职信
2013/10/31 职场文书
班主任寄语大全
2014/04/04 职场文书
民主评议党员总结
2014/10/20 职场文书
鲁冰花观后感
2015/06/10 职场文书
《倍数和因数》教学反思
2016/02/23 职场文书
动画「半妖的夜叉姬」新BD特典图公开
2022/03/22 日漫