php 字符串包含另一个字符串_每天一个PHP语法二字符串使用及内部结构
生活随笔
收集整理的這篇文章主要介紹了
php 字符串包含另一个字符串_每天一个PHP语法二字符串使用及内部结构
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
說明
這里基于php7.2.5進行測試,php7之后內部結構變化應該不是太大,但與php5.X有差別。
代碼
基于上一篇我們說的變量的聲明與使用我們這次說一下字符串及實現
$a = "hello";我們說zend_value.str結構用來存儲字符串,具體到內部的結構就是zend_string
struct _zend_string {zend_refcounted_h gc; /*引用計數 用于垃圾回收*/zend_ulong h; /* hash value */size_t len; /* 字符串長度 */char val[1]; /* 值 hello */};這里我們只關注len與val。len用來存儲字符串長度,val用來存儲值, val是char類型的數組,char是字符類型,長度是1個字節,存儲單個字符。
這里len的好處我們可以直接獲取字符串的長度,如strlen($a) , 我們后面再說這個函數。
字符串在C語言中并不是內置類型,他其實是字符數組。C語言中聲明字符串
#include #include int main(){char hello[] = "hs"; printf("%s ", hello); return 0;}C語言的字符串沒有存儲長度,它是以null為終止符的,也就是遇到'0'字符就認為是結束了。
我們對比下,C與PHP中獲取字符串長度的區別。
#include #include int main(){char hello[] = "h0s";char hello1[] = "hs";int len,len1;len = strlen(hello);printf("hello長度 %d ", len); // 1 因為遇到0就終止了len1 = strlen(hello1);printf("hello1長度 %d ", len1); //2 return 0;}gcc helloword.c -o helloword./hellowordhello長度 1hello1長度 2PHP
echo strlen("h0s");echo PHP_EOL;echo strlen("hs");echo PHP_EOL;php hello.php32可以看到zend_string的len是很便捷的、很安全的。
總結
php通過zend_string存儲字符串,其中len存放字符串長度,val存放值。
總結
以上是生活随笔為你收集整理的php 字符串包含另一个字符串_每天一个PHP语法二字符串使用及内部结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pb系统改java_「软帝学院」:201
- 下一篇: php 代码修改后 重新实例化_从匿名函