摘要:在中是常用的類型,今天就開始閱讀他的函數(shù),本人小菜,有什么錯誤的地方望大神指點。首先的函數(shù)定義在文件中,這里我看的版本是。
在php中String是常用的類型,今天就開始閱讀他的函數(shù),本人小菜,有什么錯誤的地方望大神指點。
首先string的函數(shù)定義在/ext/standard/string.c文件中,這里我看的php版本是php7.1.2。
首先在對于php源碼中的函數(shù),定義方法都是PHP_FUNCTION(方法名稱)
源碼:
strtolower和strtoupper
這兩個函數(shù)的源碼相對比較簡單,但是在文件中既出現(xiàn) PHPAPI char *php_strtoupper(char *s, size_t len) 又出現(xiàn)了 PHPAPI zend_string *php_string_toupper(zend_string *s) 他們代碼的主要算法是一樣的,但是在定于strtoupper方法處是這樣寫的
PHP_FUNCTION(strtoupper) { zend_string *arg; ZEND_PARSE_PARAMETERS_START(1, 1) Z_PARAM_STR(arg) ZEND_PARSE_PARAMETERS_END(); RETURN_STR(php_string_toupper(arg)); }
所以函數(shù)應該是php_string_toupper,至于php_strtoupper,由檢索得這個函數(shù)可能是為內(nèi)部一些方法提供的接口
PHPAPI zend_string *php_string_toupper(zend_string *s) { unsigned char *c, *e; //c是字符串的起始位置,e是字符串的結束位置 c = (unsigned char *)ZSTR_VAL(s); //返回zeng_tring類型中數(shù)據(jù)部分val的值,也就是字符串的首地址 e = c + ZSTR_LEN(s); //因為是e定義的是指針類型,所以e的地址就是字符串的首地址+字符串長度,也就是"