简单谈谈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 时间计算问题小结
Jan 04 PHP
PHP最常用的2种设计模式工厂模式和单例模式介绍
Aug 14 PHP
PHP 过滤页面中的BOM(实现代码)
Jun 29 PHP
php实现的DateDiff和DateAdd时间函数代码分享
Aug 16 PHP
PHP集成百度Ueditor 1.4.3
Nov 23 PHP
Thinkphp关闭缓存的方法
Jun 26 PHP
php+MySQL实现登录时验证登录名和密码是否正确
May 10 PHP
基于PHP制作验证码
Oct 12 PHP
PHP创建多级目录的两种方法
Oct 28 PHP
老生常谈PHP面向对象之命令模式(必看篇)
May 24 PHP
Laravel框架FormRequest中重写错误处理的方法
Feb 18 PHP
PHP设计模式(观察者模式)
Jul 07 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预定义常量
2006/12/25 PHP
Wordpress php 分页代码
2009/10/21 PHP
关于PHP模板Smarty的初级使用方法以及心得分享
2013/06/21 PHP
php遍历目录方法小结
2015/03/10 PHP
/etc/php-fpm.d/www.conf 配置注意事项
2017/02/04 PHP
PHP中SESSION过期设置
2021/03/09 PHP
Javascript操作cookie的函数代码
2012/10/03 Javascript
JavaScript的setAttribute兼容性问题解决方法
2013/11/11 Javascript
jquery统计输入文字的个数并对其进行判断
2014/01/07 Javascript
jquery实现的Banner广告收缩效果代码
2015/09/02 Javascript
js仿百度登录页实现拖动窗口效果
2016/03/11 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
jQuery实现div跟随鼠标移动
2020/08/20 jQuery
vue.js 实现图片本地预览 裁剪 压缩 上传功能
2018/03/01 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
微信小程序自定义组件封装及父子间组件传值的方法
2018/08/28 Javascript
Vue刷新修改页面中数据的方法
2018/09/16 Javascript
小程序中使用css var变量(使js可以动态设置css样式属性)
2020/03/31 Javascript
Python内置的字符串处理函数详细整理(覆盖日常所用)
2014/08/19 Python
举例介绍Python中的25个隐藏特性
2015/03/30 Python
Python 批量合并多个txt文件的实例讲解
2018/05/08 Python
Python OpenCV处理图像之图像直方图和反向投影
2018/07/10 Python
python爬虫获取小区经纬度以及结构化地址
2018/12/30 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
2019/09/18 Python
python类共享变量操作
2020/09/03 Python
canvas基础之图形验证码的示例
2018/01/02 HTML / CSS
HTML5里的placeholder属性使用实例和美化显示效果的方法
2014/04/23 HTML / CSS
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
奥地利网上书店:Weltbild
2017/07/14 全球购物
总监职责范文
2013/11/09 职场文书
生产厂厂长岗位职责
2013/12/25 职场文书
平安工地建设方案
2014/05/06 职场文书
2015年信息技术教研组工作总结
2015/07/22 职场文书
创业计划书之便利店
2019/09/05 职场文书
教你如何使用Python下载B站视频的详细教程
2021/04/29 Python
Kubernetes关键组件与结构组成介绍
2022/03/31 Servers