简单谈谈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 相关文章推荐
攻克CakePHP系列三 表单数据增删改
Oct 22 PHP
PHP运行环境配置与开发环境的配置(图文教程)
Jun 04 PHP
php 批量生成html,txt文件的实现代码
Jun 26 PHP
ThinkPHP3.1新特性之对Ajax的支持更加完善
Jun 19 PHP
php修改指定文件后缀的方法
Sep 11 PHP
详解PHP的Yii框架的运行机制及其路由功能
Mar 17 PHP
php数据库操作model类(使用__call方法)
Nov 16 PHP
PHP使用PDO访问oracle数据库的步骤详解
Sep 29 PHP
PHP实现正则匹配所有括号中的内容
Jun 22 PHP
laravel使用Faker数据填充的实现方法
Apr 12 PHP
YII框架页面缓存操作示例
Apr 29 PHP
解决PHP curl或file_get_contents下载图片损坏或无法打开的问题
Oct 11 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小技巧搜集,每个PHPer都来露一手
2007/01/02 PHP
PHP学习笔记之一
2011/01/17 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
2013/08/16 PHP
Yii2 queue的队列使用详解
2019/07/19 PHP
PHP Trait功能与用法实例分析
2020/06/03 PHP
B/S开发中常用javaScript技术与代码
2007/03/09 Javascript
自制基于jQuery的智能提示插件一枚
2011/02/18 Javascript
JQuery扩展插件Validate—6 radio、checkbox、select的验证
2011/09/05 Javascript
jQuery JSON实现无刷新三级联动实例探讨
2013/05/28 Javascript
通过JQuery实现win8一样酷炫的动态磁贴效果(示例代码)
2013/07/13 Javascript
js实现每日自动换一张图片的方法
2015/05/04 Javascript
Ionic默认的Tabs模板使用实例
2016/08/29 Javascript
js实现鼠标拖拽多选功能示例
2017/08/01 Javascript
js canvas实现写字动画效果
2018/11/30 Javascript
开发中常用的25个JavaScript单行代码(小结)
2019/06/28 Javascript
layer.js之回调销毁对话框的例子
2019/09/11 Javascript
js实现烟花特效
2020/03/02 Javascript
vue+Element-ui实现登录注册表单
2020/11/17 Javascript
js观察者模式的弹幕案例
2020/11/23 Javascript
js制作提示框插件
2020/12/24 Javascript
python实现事件驱动
2018/11/21 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
2020/11/25 Python
css3 响应式媒体查询的示例代码
2019/09/25 HTML / CSS
中国电子产品外贸网站:MiniIntheBox
2017/02/06 全球购物
全球领先的在线cosplay服装商店:RoleCosplay
2020/01/18 全球购物
毕业生动漫设计求职信
2013/10/11 职场文书
开办饭店创业计划书
2013/12/28 职场文书
玲玲的画教学反思
2014/02/04 职场文书
《周恩来的四个昼夜》观后思想汇报范文两篇
2014/09/10 职场文书
2015学校图书管理员工作总结
2015/05/11 职场文书
贫困证明书范文
2015/06/16 职场文书
关于教师节的广播稿
2015/08/19 职场文书
《海上日出》教学反思
2016/02/23 职场文书
八年级作文之感恩
2019/11/22 职场文书
python 如何获取页面所有a标签下href的值
2021/05/06 Python
微信小程序 WeUI扩展组件库的入门教程
2022/04/21 Javascript