简单谈谈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 相关文章推荐
建立动态的WML站点(一)
Oct 09 PHP
PHP+JS+rsa数据加密传输实现代码
Mar 23 PHP
PHP中文处理 中文字符串截取(mb_substr)和获取中文字符串字数
Nov 10 PHP
php addslashes及其他清除空格的方法是不安全的
Jan 25 PHP
在Win7 中为php扩展配置Xcache
Oct 08 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
Jun 21 PHP
PHP+mysql实现从数据库获取下拉树功能示例
Jan 06 PHP
PHP使用xpath解析XML的方法详解
May 20 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
Aug 17 PHP
PHP简单实现欧拉函数Euler功能示例
Nov 06 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
Apr 04 PHP
laravel 去掉index.php伪静态的操作方法
Oct 12 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实现将任意进制数转换成10进制的方法
2015/04/17 PHP
CI分页类首页、尾页不显示的解决方法
2016/03/28 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
PHP封装的简单连接MongoDB类示例
2019/02/13 PHP
基于PHP的登录和注册的功能的实现
2020/08/06 PHP
使Ext的Template可以解析二层的json数据的方法
2007/12/22 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
Javascript获取窗口(容器)的大小及位置参数列举及简要说明
2012/12/09 Javascript
在父页面调用子页面的JS方法
2013/09/29 Javascript
js 去除字符串第一位逗号的方法
2014/06/07 Javascript
JS中getYear()和getFullYear()区别分析
2014/07/04 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
2015/02/18 Javascript
jQuery实现切换页面过渡动画效果
2015/10/29 Javascript
Bootstrap树形组件jqTree的简单封装
2016/01/25 Javascript
深入浅析JavaScript中的scrollTop
2016/07/11 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
JavaScript实现精美个性导航栏筋斗云效果
2017/10/29 Javascript
jQuery实现简单的Ajax调用功能示例
2019/02/15 jQuery
[04:38]完美世界携手游戏风云打造 卡尔工作室饰品系统篇
2013/04/25 DOTA
[28:28]Ti4 冒泡赛第二天NEWBEE vs NaVi 2
2014/07/15 DOTA
[51:29]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
使用Python实现博客上进行自动翻页
2017/08/23 Python
python实现二叉树的遍历
2017/12/11 Python
python抓取文件夹的所有文件
2018/02/27 Python
Python 给某个文件名添加时间戳的方法
2018/10/16 Python
Python爬虫爬取杭州24时温度并展示操作示例
2020/03/27 Python
python + selenium 刷B站播放量的实例代码
2020/06/12 Python
HTML5离线缓存Manifest是什么
2016/03/09 HTML / CSS
英国翻新电子产品购物网站:Tech Trade
2017/12/25 全球购物
Diamondback自行车:拥有你的冒险
2019/04/22 全球购物
数据库的约束含义
2012/09/09 面试题
学校法制宣传月活动总结
2014/07/03 职场文书
2014年旅游局法制宣传日活动总结
2014/11/01 职场文书
网络妈妈观后感
2015/06/08 职场文书
幼儿园教师暑期培训心得体会
2016/01/09 职场文书
从原生JavaScript到React深入理解
2022/07/23 Javascript