简单谈谈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 相关文章推荐
一个oracle+PHP的查询的例子
Oct 09 PHP
生成缩略图
Oct 09 PHP
十天学会php之第一天
Oct 09 PHP
一个简洁的多级别论坛
Oct 09 PHP
php入门学习知识点二 PHP简单的分页过程与原理
Jul 14 PHP
PHPThumb PHP 图片缩略图库
Mar 11 PHP
php中判断数组相等的方法以及数组运算符介绍
Mar 30 PHP
编写PHP脚本来实现WordPress中评论分页的功能
Dec 10 PHP
PHP函数引用返回的实例详解
Sep 11 PHP
PHP面向对象程序设计组合模式与装饰模式详解
Dec 02 PHP
thinkPHP5分页功能实现方法分析
Oct 25 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
Oct 03 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正则校验用户名介绍
2008/07/19 PHP
PHP Socket 编程
2010/04/09 PHP
PHP 文件上传全攻略
2010/04/28 PHP
Yii2 批量插入、更新数据实例
2017/03/15 PHP
PHP实现动态创建XML文档的方法
2018/03/30 PHP
YII2框架中ActiveDataProvider与GridView的配合使用操作示例
2020/03/18 PHP
Javascript学习笔记一 之 数据类型
2010/12/15 Javascript
ie支持function.bind()方法实现代码
2012/12/27 Javascript
js取消单选按钮选中并判断对象是否为空
2013/11/14 Javascript
js跳转页面方法总结
2014/01/29 Javascript
js使用正则实现ReplaceAll全部替换的方法
2014/08/22 Javascript
JavaScript汉诺塔问题解决方法
2015/04/21 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
2015/07/27 Javascript
js父页面中使用子页面的方法
2016/01/09 Javascript
AngularJS实现分页显示数据库信息
2016/07/01 Javascript
在windows上用nodejs搭建静态文件服务器的简单方法
2016/08/11 NodeJs
对Angular.js Controller如何进行单元测试
2016/10/25 Javascript
AngularJS入门教程一:路由用法初探
2017/05/27 Javascript
详解Angular中实现自定义组件的双向绑定的两种方法
2018/11/23 Javascript
Vue 指令实现按钮级别权限管理功能
2019/04/23 Javascript
微信小程序页面渲染实现方法
2019/11/06 Javascript
python应用程序在windows下不出现cmd窗口的办法
2014/05/29 Python
python脚本监控docker容器
2016/04/27 Python
python处理xml文件的方法小结
2017/05/02 Python
Python实现爬取马云的微博功能示例
2019/02/16 Python
Python qrcode 生成一个二维码的实例详解
2020/02/12 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
2020/06/14 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
几款Python编译器比较与推荐(小结)
2020/10/15 Python
荷兰电脑专场:Paradigit
2018/05/05 全球购物
酒吧副总经理岗位职责
2013/12/10 职场文书
2014年商场超市庆元旦活动方案
2014/02/14 职场文书
管理部副部长岗位职责范文
2014/03/09 职场文书
11.9消防日宣传标语
2014/10/08 职场文书
停发工资证明范本
2015/06/12 职场文书
vue-cli3.x配置全局的scss的时候报错问题及解决
2022/04/30 Vue.js