简单谈谈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面向对象全攻略 (七) 继承性
Sep 30 PHP
深入PHP变量存储的详解
Jun 13 PHP
浅析php中jsonp的跨域实例
Jun 21 PHP
php遍历目录与文件夹的多种方法详解
Nov 14 PHP
PHP中使用gettext解决国际化问题的例子(i18n)
Jun 13 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
Sep 10 PHP
php使用pdo连接sqlite3的配置示例
May 27 PHP
php解决DOM乱码的方法示例代码
Nov 20 PHP
PHP调试及性能分析工具Xdebug详解
Feb 09 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
Jun 06 PHP
Laravel5.4框架使用socialite实现github登录的方法
Mar 20 PHP
ThinkPHP3.2框架自带分页功能实现方法示例
May 13 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 无法加载mysql的module的时候的配置的解决方案引发的思考
2012/01/27 PHP
详解HTTP Cookie状态管理机制
2016/01/14 PHP
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
js清空表单数据的两种方式(遍历+reset)
2014/07/18 Javascript
js事件监听器用法实例详解
2015/06/01 Javascript
jquery+css3实现网页背景花瓣随机飘落特效
2015/08/17 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
2015/11/24 Javascript
jqGrid表格应用之新增与删除数据附源码下载
2015/12/02 Javascript
picLazyLoad 实现图片延时加载(包含背景图片)
2016/07/21 Javascript
微信小程序 教程之事件
2016/10/18 Javascript
快速使用node.js进行web开发详解
2017/04/26 Javascript
Angular4 中内置指令的基本用法
2017/07/31 Javascript
Angular4自制一个市县二级联动组件示例
2017/11/21 Javascript
Angular实现可删除并计算总金额的购物车功能示例
2017/12/26 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
使用vue自定义指令开发表单验证插件validate.js
2019/05/23 Javascript
[00:16]热血竞技场
2019/03/06 DOTA
Django objects的查询结果转化为json的三种方式的方法
2018/11/07 Python
使用pandas实现csv/excel sheet互相转换的方法
2018/12/10 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
2019/04/26 Python
Python数据类型之List列表实例详解
2019/05/08 Python
Python字典深浅拷贝与循环方式方法详解
2020/02/09 Python
安装Anaconda3及使用Jupyter的方法
2020/10/27 Python
基于第一个PhoneGap(cordova)的应用详解
2013/05/03 HTML / CSS
阿根廷票务网站:StubHub阿根廷
2018/04/13 全球购物
英国二手iPhone、音乐、电影和游戏商店:musicMagpie
2018/10/26 全球购物
怎样创建、运行java程序
2014/08/01 面试题
Python文件操作的面试题
2013/06/22 面试题
生产副总岗位职责
2013/11/28 职场文书
大学生实习自我鉴定
2013/12/11 职场文书
装修设计师求职信
2014/02/26 职场文书
中学生国旗下讲话稿
2014/04/26 职场文书
2014民事授权委托书范本
2014/09/29 职场文书
企业百日安全活动总结
2015/05/07 职场文书
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers