资讯专栏INFORMATION COLUMN

[PHP源码阅读]strlen函数

LiangJ / 1004人阅读

摘要:文章来自我在有对源码更详细的注解。在这里也给出函数的源码该文章讲到,该函数很简单,并不需要进一步的解释。笔者较笨,于是便想理解函数是怎么返回变量长度的。由此我们可以知道,函数是通过直接返回结构体中的的属性来实现的。

文章来自:http://www.hoohack.me/2016/02/22/phps-source-analytics-strlen

我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。

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属性来实现的。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21356.html

相关文章

  • [PHP源码阅读]explode和implode函数

    摘要:在实现里面,如果大于,则调用函数如果小于,则调用函数如果等于,则被当做处理,此时调用函数将添加到数组中。找到分隔符的位置之后,就调用函数将分隔得到的字符串插入到返回数组里。此函数可以看作是的逆向过程。调用函数做字符串的连接。 explode和implode函数主要用作字符串和数组间转换的操作,比如获取一段参数后根据某个字符分割字符串,或者将一个数组的结果使用一个字符合并成一个字符串输出...

    Ocean 评论0 收藏0
  • [PHP源码阅读]strpos、strstr和stripos、stristr函数

    摘要:例子的值是,因此核心源码调用函数查找如果不是字符串,转换成数字并赋值为该数字的字符。设置结束字符有一点要注意的是,如果不是字符串的话,会调用函数将转成整型数字并转换为其值。变量就是调用函数时传递的变量。核心源码拷贝一份调用函数找出的值。 我在github有对PHP源码更详细的注解。感兴趣的可以围观一下,给个star。PHP5.4源码注解。可以通过commit记录查看已添加的注解。 st...

    derek_334892 评论0 收藏0
  • [PHP源码阅读]trim、rtrim、ltrim函数

    摘要:系列函数是用于去除字符串中首尾的空格或其他字符。此处要注意,左右两边是一对合法的范围值,如果传递的是非法的值会报错。本文主要对函数进行分析,和函数跟的类似。更多源码文章源码阅读函数性能为王从源码剖析和源码阅读和函数源码阅读和函数 trim系列函数是用于去除字符串中首尾的空格或其他字符。ltrim函数只去除掉字符串首部的字符,rtrim函数只去除字符串尾部的字符。 我在github有对P...

    时飞 评论0 收藏0
  • [PHP源码阅读]empty和isset函数

    摘要:函数使用格式判断变量是否为空。对于,如果变量被如的函数设为,则函数会返回。,到分支,,返回数组元素的数量,为空,因此为,,,因此返回。 近日被问到PHP中empty和isset函数时怎么判断变量的,刚开始我是一脸懵逼的,因为我自己也只是一知半解,为了弄懂其真正的原理,赶紧翻开源码研究研究。经过分析可发现两个函数调用的都是同一个函数,因此本文将对两个函数一起分析。 我在github有对P...

    Pink 评论0 收藏0
  • [译] 理解 PHP 内部函数的定义(给PHP开发者的PHP源码-第二部分)

    摘要:文章来自原文欢迎来到给开发者的源码系列的第二部分。是在内部代表任意一个变量的定义。这种情况下函数会抛出警告,而此函数马上返回会返回给的用户层代码。原因是,是少数通过而不是扩展定义的函数。下一部分下一部分会再次发表在。 文章来自:http://www.hoohack.me/2016/02/10/understanding-phps-internal-function-definitio...

    hizengzeng 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<