php 字符串包含另一个字符串_每天一个PHP语法二字符串使用及内部结构
說明
這里基于php7.2.5進(jìn)行測(cè)試,php7之后內(nèi)部結(jié)構(gòu)變化應(yīng)該不是太大,但與php5.X有差別。
代碼
基于上一篇我們說的變量的聲明與使用我們這次說一下字符串及實(shí)現(xiàn)
$a = "hello";我們說zend_value.str結(jié)構(gòu)用來存儲(chǔ)字符串,具體到內(nèi)部的結(jié)構(gòu)就是zend_string
struct _zend_string {zend_refcounted_h gc; /*引用計(jì)數(shù) 用于垃圾回收*/zend_ulong h; /* hash value */size_t len; /* 字符串長(zhǎng)度 */char val[1]; /* 值 hello */};這里我們只關(guān)注len與val。len用來存儲(chǔ)字符串長(zhǎng)度,val用來存儲(chǔ)值, val是char類型的數(shù)組,char是字符類型,長(zhǎng)度是1個(gè)字節(jié),存儲(chǔ)單個(gè)字符。
這里len的好處我們可以直接獲取字符串的長(zhǎng)度,如strlen($a) , 我們后面再說這個(gè)函數(shù)。
字符串在C語(yǔ)言中并不是內(nèi)置類型,他其實(shí)是字符數(shù)組。C語(yǔ)言中聲明字符串
#include #include int main(){char hello[] = "hs"; printf("%s ", hello); return 0;}C語(yǔ)言的字符串沒有存儲(chǔ)長(zhǎng)度,它是以null為終止符的,也就是遇到'0'字符就認(rèn)為是結(jié)束了。
我們對(duì)比下,C與PHP中獲取字符串長(zhǎng)度的區(qū)別。
#include #include int main(){char hello[] = "h0s";char hello1[] = "hs";int len,len1;len = strlen(hello);printf("hello長(zhǎng)度 %d ", len); // 1 因?yàn)橛龅?就終止了len1 = strlen(hello1);printf("hello1長(zhǎng)度 %d ", len1); //2 return 0;}gcc helloword.c -o helloword./hellowordhello長(zhǎng)度 1hello1長(zhǎng)度 2PHP
echo strlen("h0s");echo PHP_EOL;echo strlen("hs");echo PHP_EOL;php hello.php32可以看到zend_string的len是很便捷的、很安全的。
總結(jié)
php通過zend_string存儲(chǔ)字符串,其中l(wèi)en存放字符串長(zhǎng)度,val存放值。
總結(jié)
以上是生活随笔為你收集整理的php 字符串包含另一个字符串_每天一个PHP语法二字符串使用及内部结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pb系统改java_「软帝学院」:201
- 下一篇: windows 代理软件_一款强大的远程