簡單談?wù)凱HP中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ù)很簡單,并不需要進(jìn)一步的解釋。而這篇文章也有對zend_parse_parameters函數(shù)做介紹。筆者較笨,于是便想理解zend_parse_parameters函數(shù)是怎么返回變量長度的。
在zend_parse_arg_impl函數(shù),就是解析參數(shù)的地方,我們繼續(xù)看case 's'的分支。這個(gè)分支是對字符串變量的解析。
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屬性來實(shí)現(xiàn)的。
相關(guān)文章
php生成4位數(shù)字驗(yàn)證碼的實(shí)現(xiàn)代碼
這篇文章主要介紹了php數(shù)字驗(yàn)證碼的實(shí)現(xiàn)代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下2015-11-11
在php中實(shí)現(xiàn)限流ip次數(shù)以及允許部分ip訪問的代碼示例
這篇文章給大家介紹了如何在php中實(shí)現(xiàn)限流ip次數(shù)以及允許部分ip訪問,文中通過代碼示例給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)具有一定的參考價(jià)值,需要的朋友可以參考下2023-12-12
使ecshop模板中可引用常量的實(shí)現(xiàn)方法
據(jù)說ecshop的模板類是修改的smarty,不過個(gè)人感覺不是修改是完全重寫了。它和smarty上只是模板標(biāo)簽上有相同的地方,同時(shí)閹割了很多功能2011-06-06
php清空(刪除)指定目錄下的文件,不刪除目錄文件夾的實(shí)現(xiàn)代碼
這篇文章主要介紹了php清空(刪除)指定目錄下的文件,不刪除目錄文件夾的實(shí)現(xiàn)代碼,需要的朋友可以參考下2014-09-09
Laravel實(shí)現(xiàn)批量更新多條數(shù)據(jù)
這篇文章主要介紹了Laravel實(shí)現(xiàn)批量更新多條數(shù)據(jù),需要的朋友可以參考下2020-04-04
PHP用mysql數(shù)據(jù)庫存儲session的代碼
大部分使用php的人一旦應(yīng)用到session都會使用cookie。 cookie雖好可是它也會給我們帶來一些隱患的。2010-03-03

