简单谈谈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 相关文章推荐
一个简洁的多级别论坛
Oct 09 PHP
PHP中的正规表达式(一)
Oct 09 PHP
PHP实现生成透明背景的PNG缩略图函数分享
Jul 08 PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
Aug 11 PHP
PHP中定义数组常量(array常量)的方法
Nov 17 PHP
Thinkphp实现自动验证和自动完成
Dec 19 PHP
yii2 页面底部加载css和js的技巧
Apr 21 PHP
PHP的中使用非缓冲模式查询数据库的方法
Feb 05 PHP
PHP PDOStatement::closeCursor讲解
Jan 30 PHP
PHP进阶学习之类的自动加载机制原理分析
Jun 18 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
Feb 27 PHP
php实现图片压缩处理
Sep 09 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
PHP5新特性: 更加面向对象化的PHP
2006/11/18 PHP
php中支持多种编码的中文字符串截取函数!
2007/03/20 PHP
深入解析PHP中逗号与点号的区别
2013/08/05 PHP
PHP学习笔记(一) 简单了解PHP
2014/08/04 PHP
php封装json通信接口详解及实例
2017/03/07 PHP
PHP实现防盗链的方法分析
2017/07/25 PHP
JS 表单验证大全
2011/11/23 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
网页右下角弹出窗体实现代码
2014/06/05 Javascript
EasyUI中combobox默认值注意事项
2015/03/01 Javascript
JavaScript使用push方法添加一个元素到数组末尾用法实例
2015/04/06 Javascript
jquery简单的弹出层浮动层代码
2015/04/27 Javascript
js实现使用鼠标拖拽切换图片的方法
2015/05/04 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
2016/10/29 Javascript
JS实现的简易拖放效果示例
2016/12/29 Javascript
老生常谈的跨域处理
2017/01/11 Javascript
JavaScript实现的数字与字符串转换功能示例
2017/08/23 Javascript
node.js中http模块和url模块的简单介绍
2017/10/06 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
2019/03/14 Javascript
由Python运算π的值深入Python中科学计算的实现
2015/04/17 Python
python编程实现希尔排序
2017/04/13 Python
Mac中升级Python2.7到Python3.5步骤详解
2017/04/27 Python
Python查询IP地址归属完整代码
2017/06/21 Python
Python md5与sha1加密算法用法分析
2017/07/14 Python
Python3安装Pillow与PIL的方法
2019/04/03 Python
python使用正则表达式(Regular Expression)方法超详细
2019/12/30 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
Python实现敏感词过滤的4种方法
2020/09/12 Python
在Pycharm中安装Pandas库方法(简单易懂)
2021/02/20 Python
IE8下CSS3选择器nth-child() 不兼容问题的解决方法
2016/11/16 HTML / CSS
软件测试题目
2013/02/27 面试题
党员自我评价分享
2013/12/13 职场文书
大学生旷课检讨书
2014/01/22 职场文书
党支部承诺书
2015/01/20 职场文书
使用python向MongoDB插入时间字段的操作
2021/05/18 Python