php内置函数分析之strtoupper()strtolower()

Posted 那天ws

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php内置函数分析之strtoupper()strtolower()相关的知识,希望对你有一定的参考价值。

strtoupper():

 1 php_FUNCTION(strtoupper)
 2 {
 3     zend_string *str;
 4 
 5     ZEND_PARSE_PARAMETERS_START(1, 1)
 6         Z_PARAM_STR(str)
 7     ZEND_PARSE_PARAMETERS_END();
 8 
 9     RETURN_STR(php_string_toupper(str));
10 }

主要实现在 php_string_toupper()函数:

 1 PHPAPI zend_string *php_string_toupper(zend_string *s)
 2 {
 3     unsigned char *c, *e;
 4 
 5     c = (unsigned char *)ZSTR_VAL(s); //字符串首地址
 6     e = c + ZSTR_LEN(s); // 字符串末尾之后的地址,指向字符串结束标志"\0"
 7 
 8     while (c < e) {
 9         if (islower(*c)) { //遇到第一个小写字符,则进入此if分支,对之后字符的操作都将在此if中完成
10             register unsigned char *r;
11             zend_string *res = zend_string_alloc(ZSTR_LEN(s), 0); //开辟内存存放zend_string类型数据
12 
13             if (c != (unsigned char*)ZSTR_VAL(s)) { //c不是字符串首地址时,执行此if
14                 memcpy(ZSTR_VAL(res), ZSTR_VAL(s), c - (unsigned char*)ZSTR_VAL(s)); //将c位置之前的字符数据复制给res
15             }
16             r = c + (ZSTR_VAL(res) - ZSTR_VAL(s)); // 开始进行转换的位置
17             // 下面的while中对每个字符都执行大写转换操作
18             while (c < e) {
19                 *r = toupper(*c);
20                 r++;
21                 c++;
22             }
23             *r = \0; //为字符串添加结束标志
24             return res; //返回新字符串
25         }
26         c++;
27     }
28     return zend_string_copy(s); //原始字符串没有被操作,则返回原始字符串,并将引用+1 
29 }

strtolower()与之类似。

以上是关于php内置函数分析之strtoupper()strtolower()的主要内容,如果未能解决你的问题,请参考以下文章

php内置函数分析之ucfirst()lcfirst()

php内置函数分析之strrev()

php 内置函数(熟练掌握50个)

php内置函数分析之strpos()

php常用函数

php对字符串的操作4之 字符串的格式化函数