簡單談談PHP中strlen 函數(shù)
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ù)很簡單,并不需要進一步的解釋。而這篇文章也有對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結構體中的str的len屬性來實現(xiàn)的。
相關文章
ThinkPHP模板標簽eq if 中區(qū)分0,null,false的方法
下面小編就為大家?guī)硪黄猅hinkPHP模板標簽eq if 中區(qū)分0,null,false的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03php連接odbc數(shù)據(jù)源并保存與查詢數(shù)據(jù)的方法
這篇文章主要介紹了php連接odbc數(shù)據(jù)源并保存與查詢數(shù)據(jù)的方法,涉及odbc數(shù)據(jù)源的操作技巧,非常具有實用價值,需要的朋友可以參考下2014-12-12PHP利用func_get_args和func_num_args函數(shù)實現(xiàn)函數(shù)重載實例
這篇文章主要介紹了PHP利用func_get_args和func_num_args函數(shù)實現(xiàn)函數(shù)重載的方法,實例展示了PHP實現(xiàn)重載的具體方法,是非常實用的技巧,需要的朋友可以參考下2014-11-11PHP+Mysql樹型結構(無限分類)數(shù)據(jù)庫設計的2種方式實例
這篇文章主要介紹了PHP+Mysql樹型結構(無限分類)數(shù)據(jù)庫設計的2種方式實例,以及優(yōu)劣分析、探討,需要的朋友可以參考下2014-07-07PHP7實現(xiàn)和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
這篇文章主要介紹了PHP7實現(xiàn)和CryptoJS的AES加密方式互通操作,結合實例形式分析了PHP AES-128-ECB加密算法相關使用技巧,需要的朋友可以參考下2019-06-06