PHP explode 函式原始碼分析

2021-06-18 11:39:23 字數 835 閱讀 4031

在php**開發中,我們經常需要把乙個字串分割成陣列,這時候我們經常會使用 php explode() 函式來幫我們實現。這篇文章我們主要來學學 explode() 函式是怎麼工作的。

檔案1:ext/standard/string.c (explode的源**)

php_function

(explode)if

(delim_len ==0

)// 這裡會開闢乙個陣列,用來存放分割後的資料

array_init

(return_value

);// 因為這個,我們用explode('|', '');成為了合法的if(

str_len ==0

)return;}

// 下面這兩個是將原字串和分割符都構建成_zval_struct 結構,

// zval_stringl會分配空間~~源**隨後貼出

zval_stringl

(&zstr

,str

,str_len,0

);zval_stringl

(&zdelim

,delim

,delim_len,0

);// limit值是explode中允許傳遞的explode的第三個引數,它允許正負if(

limit

>1)

elseif(

limit

<0)

else

}

文章摘自 php explode() 函式原始碼分析

waitpid函式原始碼

int sys waitpid pid t pid,unsigned long stat addr int options 掛起當前程序,直到pid指定的子程序退出終止或者收到要求終止該程序 的訊號 或者需要呼叫 乙個訊號處理函式 elseif pid elseif pid 1 以下的語名定為要找到...

strtok函式原始碼

今天用到strtok時,總感覺怪怪的,為啥第二次呼叫第乙個引數要用null,難道是函式內部儲存了當前的狀態,假如這樣的話,那就不能對多個串交叉呼叫strtok了,而且儲存這個狀態的不是全域性變數就是static變數。於是看了他的原始碼,有幾個不同的版本,思想是一樣的。感覺寫的挺巧妙的,深深的折服這些...

memset函式原始碼實現

void memset void dst,int val,size t count 將dst所指向的某一塊記憶體中的前count個 位元組的內容全部設定為val指定的 ascii 值,第乙個值為指定的記憶體位址,塊的大小由第三個引數指定,這個函式通常為新申請的記憶體做初始化工作,其返回值為指向s的指...