成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[PHP源碼閱讀]strlen函數(shù)

LiangJ / 1014人閱讀

摘要:文章來自我在有對源碼更詳細(xì)的注解。在這里也給出函數(shù)的源碼該文章講到,該函數(shù)很簡單,并不需要進(jìn)一步的解釋。筆者較笨,于是便想理解函數(shù)是怎么返回變量長度的。由此我們可以知道,函數(shù)是通過直接返回結(jié)構(gòu)體中的的屬性來實現(xiàn)的。

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

我在github有對PHP源碼更詳細(xì)的注解。感興趣的可以圍觀一下,給個star。PHP5.4源碼注解。可以通過commit記錄查看已添加的注解。

strlen函數(shù)說明。

int strlen ( string $string )

在這篇文章,我們可以知道strlen函數(shù)是通過Zend Engine定義的。函數(shù)的定義可以在這里查看。

在這里也給出函數(shù)的源碼:

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);
}

該文章講到,該函數(shù)很簡單,并不需要進(jìn)一步的解釋。而這篇文章也有對zend_parse_parameters函數(shù)做介紹。筆者較笨,于是便想理解zend_parse_parameters函數(shù)是怎么返回變量長度的。

zend_parse_arg_impl函數(shù),就是解析參數(shù)的地方,我們繼續(xù)看case "s"的分支。這個分支是對字符串變量的解析。

int *pl = va_arg(*va, int *);是字符串長度變量的定義。

繼續(xù)往下看,可以看到對pl變量的賦值語句:*pl = Z_STRLEN_PP(arg);。

Z_STRLEN_PP宏的定義在zend_operators.h文件中:

#define Z_STRLEN_PP(zval_pp)    Z_STRLEN(**zval_pp)

再繼續(xù)看Z_STRLEN宏的定義,#define Z_STRLEN(zval) (zval).value.str.len。由此我們可以知道,strlen函數(shù)是通過直接返回zval結(jié)構(gòu)體中的str的len屬性來實現(xiàn)的。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/21356.html

相關(guān)文章

  • [PHP源碼閱讀]explode和implode函數(shù)

    摘要:在實現(xiàn)里面,如果大于,則調(diào)用函數(shù)如果小于,則調(diào)用函數(shù)如果等于,則被當(dāng)做處理,此時調(diào)用函數(shù)將添加到數(shù)組中。找到分隔符的位置之后,就調(diào)用函數(shù)將分隔得到的字符串插入到返回數(shù)組里。此函數(shù)可以看作是的逆向過程。調(diào)用函數(shù)做字符串的連接。 explode和implode函數(shù)主要用作字符串和數(shù)組間轉(zhuǎn)換的操作,比如獲取一段參數(shù)后根據(jù)某個字符分割字符串,或者將一個數(shù)組的結(jié)果使用一個字符合并成一個字符串輸出...

    Ocean 評論0 收藏0
  • [PHP源碼閱讀]strpos、strstr和stripos、stristr函數(shù)

    摘要:例子的值是,因此核心源碼調(diào)用函數(shù)查找如果不是字符串,轉(zhuǎn)換成數(shù)字并賦值為該數(shù)字的字符。設(shè)置結(jié)束字符有一點要注意的是,如果不是字符串的話,會調(diào)用函數(shù)將轉(zhuǎn)成整型數(shù)字并轉(zhuǎn)換為其值。變量就是調(diào)用函數(shù)時傳遞的變量。核心源碼拷貝一份調(diào)用函數(shù)找出的值。 我在github有對PHP源碼更詳細(xì)的注解。感興趣的可以圍觀一下,給個star。PHP5.4源碼注解??梢酝ㄟ^commit記錄查看已添加的注解。 st...

    derek_334892 評論0 收藏0
  • [PHP源碼閱讀]trim、rtrim、ltrim函數(shù)

    摘要:系列函數(shù)是用于去除字符串中首尾的空格或其他字符。此處要注意,左右兩邊是一對合法的范圍值,如果傳遞的是非法的值會報錯。本文主要對函數(shù)進(jìn)行分析,和函數(shù)跟的類似。更多源碼文章源碼閱讀函數(shù)性能為王從源碼剖析和源碼閱讀和函數(shù)源碼閱讀和函數(shù) trim系列函數(shù)是用于去除字符串中首尾的空格或其他字符。ltrim函數(shù)只去除掉字符串首部的字符,rtrim函數(shù)只去除字符串尾部的字符。 我在github有對P...

    時飛 評論0 收藏0
  • [PHP源碼閱讀]empty和isset函數(shù)

    摘要:函數(shù)使用格式判斷變量是否為空。對于,如果變量被如的函數(shù)設(shè)為,則函數(shù)會返回。,到分支,,返回數(shù)組元素的數(shù)量,為空,因此為,,,因此返回。 近日被問到PHP中empty和isset函數(shù)時怎么判斷變量的,剛開始我是一臉懵逼的,因為我自己也只是一知半解,為了弄懂其真正的原理,趕緊翻開源碼研究研究。經(jīng)過分析可發(fā)現(xiàn)兩個函數(shù)調(diào)用的都是同一個函數(shù),因此本文將對兩個函數(shù)一起分析。 我在github有對P...

    Pink 評論0 收藏0
  • [譯] 理解 PHP 內(nèi)部函數(shù)的定義(給PHP開發(fā)者的PHP源碼-第二部分)

    摘要:文章來自原文歡迎來到給開發(fā)者的源碼系列的第二部分。是在內(nèi)部代表任意一個變量的定義。這種情況下函數(shù)會拋出警告,而此函數(shù)馬上返回會返回給的用戶層代碼。原因是,是少數(shù)通過而不是擴(kuò)展定義的函數(shù)。下一部分下一部分會再次發(fā)表在。 文章來自:http://www.hoohack.me/2016/02/10/understanding-phps-internal-function-definitio...

    hizengzeng 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<