摘要:文章來自我在有對源碼更詳細(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
摘要:在實現(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é)果使用一個字符合并成一個字符串輸出...
摘要:例子的值是,因此核心源碼調(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...
摘要:系列函數(shù)是用于去除字符串中首尾的空格或其他字符。此處要注意,左右兩邊是一對合法的范圍值,如果傳遞的是非法的值會報錯。本文主要對函數(shù)進(jìn)行分析,和函數(shù)跟的類似。更多源碼文章源碼閱讀函數(shù)性能為王從源碼剖析和源碼閱讀和函數(shù)源碼閱讀和函數(shù) trim系列函數(shù)是用于去除字符串中首尾的空格或其他字符。ltrim函數(shù)只去除掉字符串首部的字符,rtrim函數(shù)只去除字符串尾部的字符。 我在github有對P...
摘要:函數(shù)使用格式判斷變量是否為空。對于,如果變量被如的函數(shù)設(shè)為,則函數(shù)會返回。,到分支,,返回數(shù)組元素的數(shù)量,為空,因此為,,,因此返回。 近日被問到PHP中empty和isset函數(shù)時怎么判斷變量的,剛開始我是一臉懵逼的,因為我自己也只是一知半解,為了弄懂其真正的原理,趕緊翻開源碼研究研究。經(jīng)過分析可發(fā)現(xiàn)兩個函數(shù)調(diào)用的都是同一個函數(shù),因此本文將對兩個函數(shù)一起分析。 我在github有對P...
摘要:文章來自原文歡迎來到給開發(fā)者的源碼系列的第二部分。是在內(nèi)部代表任意一個變量的定義。這種情況下函數(shù)會拋出警告,而此函數(shù)馬上返回會返回給的用戶層代碼。原因是,是少數(shù)通過而不是擴(kuò)展定義的函數(shù)。下一部分下一部分會再次發(fā)表在。 文章來自:http://www.hoohack.me/2016/02/10/understanding-phps-internal-function-definitio...
閱讀 4183·2023-04-26 02:40
閱讀 2667·2023-04-26 02:31
閱讀 2760·2021-11-15 18:08
閱讀 577·2021-11-12 10:36
閱讀 1436·2021-09-30 09:57
閱讀 5210·2021-09-22 15:31
閱讀 2639·2019-08-30 14:17
閱讀 1286·2019-08-30 12:58