国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

[PHP源碼閱讀]strlen函數

LiangJ / 1010人閱讀

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

文章來自: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屬性來實現的。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/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元查看
<