简单谈谈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实现用户认证及管理完全源码
Mar 11 PHP
php下实现在指定目录搜索指定类型文件的函数
Oct 03 PHP
从手册去理解分析PHP session机制
Jul 17 PHP
PHP rawurlencode与urlencode函数的深入分析
Jun 08 PHP
PHP 使用MySQL管理Session的回调函数详解
Jun 21 PHP
php jquery 多文件上传简单实例
Dec 23 PHP
laravel容器延迟加载以及auth扩展详解
Mar 02 PHP
利用“多说”制作留言板、评论系统
Jul 14 PHP
php实现在线通讯录功能(附源码)
May 13 PHP
THinkPHP获取客户端IP与IP地址查询的方法
Nov 14 PHP
php删除txt文件指定行及按行读取txt文档数据的方法
Jan 30 PHP
php+Ajax无刷新验证用户名操作实例详解
Mar 04 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 验证码的实现代码
2011/07/17 PHP
php提示Warning:mysql_fetch_array() expects的解决方法
2014/12/16 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
2016/04/21 PHP
轻轻松松学习JavaScript
2007/02/25 Javascript
js 设置选中行的样式的实现代码
2010/05/24 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
jQuery动态地获取系统时间实现代码
2013/05/24 Javascript
Ext中下拉列表ComboBox组件store数据格式用法介绍
2013/07/15 Javascript
jquery中event对象属性与方法小结
2013/12/18 Javascript
ajax提交表单实现网页无刷新注册示例
2014/05/08 Javascript
node.js中的buffer.Buffer.byteLength方法使用说明
2014/12/10 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
vue+axios+element ui 实现全局loading加载示例
2018/09/11 Javascript
详解微信小程序开发聊天室—实时聊天,支持图片预览
2019/05/20 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
2019/08/12 Javascript
使用p5.js实现动态GIF图片临摹重现
2019/10/23 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
vue-router之实现导航切换过渡动画效果
2019/10/31 Javascript
python 处理dataframe中的时间字段方法
2018/04/10 Python
对Python捕获控制台输出流的方法详解
2019/01/07 Python
PYQT5 vscode联合操作qtdesigner的方法
2020/03/24 Python
python 识别登录验证码图片功能的实现代码(完整代码)
2020/07/03 Python
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
日本热销NO.1胶原蛋白冻:Aishitoto爱希特多
2019/06/20 全球购物
加拿大领先的时尚和体育零售商:Sporting Life
2019/12/15 全球购物
Love, Bonito国际官网:新加坡女装品牌
2021/03/13 全球购物
化验室技术员岗位职责
2013/12/24 职场文书
博士毕业生自我鉴定范文
2014/04/13 职场文书
捐助倡议书范文
2014/04/15 职场文书
调研座谈会发言材料
2014/08/23 职场文书
银行竞聘报告范文
2014/11/06 职场文书
四年级学生期末评语
2014/12/26 职场文书
十月围城观后感
2015/06/08 职场文书
详解MySQL事务的隔离级别与MVCC
2021/04/22 MySQL
MySQL系列之六 用户与授权
2021/07/02 MySQL
mysql函数全面总结
2021/11/11 MySQL