简单谈谈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之第三天
Oct 09 PHP
WML,Apache,和 PHP 的介绍
Oct 09 PHP
phpMyAdmin2.11.6安装配置方法
Aug 24 PHP
PHP 使用header函数设置HTTP头的示例解析 表头
Jun 17 PHP
php函数实现判断是否移动端访问
Mar 03 PHP
PHP 获取ip地址代码汇总
Jul 05 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
Aug 31 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
Mar 23 PHP
php实现按天数、星期、月份查询的搜索框
May 02 PHP
PHP导出带样式的Excel示例代码
Aug 28 PHP
PHP中cookie知识点学习
May 06 PHP
Laravel使用RabbitMQ的方法示例
Jun 18 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的PDO操作简单示例
2016/03/30 PHP
Yii2使用表单上传文件的实例代码
2017/08/03 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
js控制href内容的连接内容的变化示例
2014/04/30 Javascript
使用变量动态设置js的属性名
2014/10/19 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
2014/10/30 Javascript
jquery实现相册一下滑动两次的方法
2015/02/09 Javascript
JavaScript控制listbox列表框的项目上下移动的方法
2015/03/18 Javascript
JavaScript使用指针操作实现约瑟夫问题实例
2015/04/07 Javascript
jQuery Mobile开发中日期插件Mobiscroll使用说明
2016/03/02 Javascript
Uploadify上传文件方法
2016/03/16 Javascript
javascript单页面手势滑屏切换原理详解
2016/03/21 Javascript
JavaScript学习笔记之创建对象
2016/03/25 Javascript
jQuery实现磁力图片跟随效果完整示例
2016/09/16 Javascript
javascript cookie用法基础教程(概念,设置,读取及删除)
2016/09/20 Javascript
H5移动端图片压缩上传开发流程
2016/11/09 Javascript
js判断PC端与移动端跳转
2020/12/24 Javascript
JavaScript实现简单的树形菜单效果
2017/06/23 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
2017/08/17 Javascript
详解Vue项目在其他电脑npm run dev运行报错的解决方法
2018/10/29 Javascript
Vue中使用canvas方法总结
2019/02/12 Javascript
Vue匿名插槽与作用域插槽的合并和覆盖行为
2019/04/22 Javascript
微信小程序实现页面浮动导航
2020/01/08 Javascript
vue动态渲染svg、添加点击事件的实现
2020/03/13 Javascript
[00:12]2018DOTA2亚洲邀请赛 Somnus丶M出阵单挑
2018/04/06 DOTA
Python简单遍历字典及删除元素的方法
2016/09/18 Python
python实现音乐下载的统计
2018/06/20 Python
Python面向对象程序设计中类的定义、实例化、封装及私有变量/方法详解
2019/02/28 Python
Python完成毫秒级抢淘宝大单功能
2019/06/06 Python
幼师自荐信
2013/10/26 职场文书
六十大寿答谢词
2014/01/12 职场文书
简单的个人租房协议书范本
2014/11/26 职场文书
中班下学期个人工作总结
2015/02/12 职场文书
研究生简历自我评
2015/03/11 职场文书
Navicat for MySQL的使用教程详解
2021/05/27 MySQL
python中使用 unittest.TestCase单元测试的用例详解
2021/08/30 Python