简单谈谈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 相关文章推荐
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
Jun 16 PHP
浅析echo(),print(),print_r(),return之间的区别
Nov 27 PHP
php实现singleton()单例模式实例
Nov 06 PHP
PHP与Ajax相结合实现登录验证小Demo
Mar 16 PHP
PHP实现一个简单url路由功能实例
Nov 05 PHP
yii2中LinkPager增加总页数和总记录数的实例
Aug 28 PHP
为何说PHP引用是个坑,要慎用
Apr 02 PHP
thinkPHP中U方法加密传递参数功能示例
May 29 PHP
php微信扫码支付 php公众号支付
Mar 24 PHP
Laravel监听数据库访问,打印SQL的例子
Oct 24 PHP
PHP命名空间(namespace)原理与用法详解
Dec 11 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
Dec 30 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读取EXCEL文件 php excelreader读取excel文件
2012/12/06 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
2018/12/18 PHP
JavaScript高级程序设计
2006/12/29 Javascript
javascript prototype,executing,context,closure
2008/12/24 Javascript
JavaScript Event学习第三章 早期的事件处理程序
2010/02/07 Javascript
javascript取消文本选定的实现代码
2010/11/14 Javascript
jquery向.ashx文件post中文乱码问题的解决方法
2011/03/28 Javascript
jquery Moblie入门—hello world的示例代码学习
2013/01/08 Javascript
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
2014/02/26 Javascript
jQuery内容折叠效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
webpack引入eslint配置详解
2018/01/22 Javascript
详解VueJS应用中管理用户权限
2018/02/02 Javascript
对layui中的onevent 和event的使用详解
2019/09/06 Javascript
Vue实现手机号、验证码登录(60s禁用倒计时)
2020/12/19 Vue.js
Python的加密模块md5、sha、crypt使用实例
2014/09/28 Python
python中threading超线程用法实例分析
2015/05/16 Python
python matlibplot绘制多条曲线图
2021/02/19 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
PyQt5实现暗黑风格的计时器
2019/07/29 Python
Django 实现xadmin后台菜单改为中文
2019/11/15 Python
python3爬虫中引用Queue的实例讲解
2020/11/24 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
结合CSS3的新特性来总结垂直居中的实现方法
2016/05/30 HTML / CSS
Html5游戏开发之乒乓Ping Pong游戏示例(三)
2013/01/21 HTML / CSS
Nordgreen手表德国官方网站:丹麦极简主义手表
2019/10/31 全球购物
俄罗斯连接商品和买家的在线平台:goods.ru
2020/11/30 全球购物
动物科学专业毕业生的自我评价
2013/11/29 职场文书
庆祝国庆节标语
2014/10/09 职场文书
甲午大海战观后感
2015/06/02 职场文书
四群教育工作总结
2015/08/10 职场文书
写给汽车4S店的创业计划书,拿来即用!
2019/08/09 职场文书
初中生入团申请书范文(五篇)
2019/10/16 职场文书
详解分布式系统中如何用python实现Paxos
2021/05/18 Python
MySQL单表千万级数据处理的思路分享
2021/06/05 MySQL