php擴充開發筆記(6)ZVAL_STRING 和 ZVAL_STRINGL
字串處理是我們常用的操作,而zend 封裝了很多關於字串運算相關的宏,先看下ZVAL_STRING 和ZVAL_STRINGL
<code><span>#define ZVAL_STRING(z, s, duplicate) do { \</span><span>const</span><span>char</span> *__s=(s); \ zval *__z = (z); \ Z_STRLEN_P(__z) = <span>strlen</span>(__s); \ Z_STRVAL_P(__z) = (duplicate?estrndup(__s, Z_STRLEN_P(__z)):(<span>char</span>*)__s);\ Z_TYPE_P(__z) = IS_STRING; \ } <span>while</span> (<span>0</span>) <span>#define ZVAL_STRINGL(z, s, l, duplicate) do { \</span><span>const</span><span>char</span> *__s=(s); <span>int</span> __l=l; \ zval *__z = (z); \ Z_STRLEN_P(__z) = __l; \ Z_STRVAL_P(__z) = (duplicate?estrndup(__s, __l):(<span>char</span>*)__s);\ Z_TYPE_P(__z) = IS_STRING; \ } <span>while</span> (<span>0</span>)</code>
因為php 內部很多字串運算(例如substr)最後都是給予這樣的宏來操作的,所以在這裡了解這兩個宏非常重要。
ZVAL_STRINGL 在處理的時候,因為給了 length 參數,所以不需要在使用 strlen 來求字串的長度了, 性能上有所提升。
前面在常用的zend api 裡面應該說過了,關於estrndup 也都是封裝了一層的,在php 擴展開發的時候,盡量使用系統封裝的函數,這樣可以優化內存,降低內存洩漏等風險,有幾個e* 開發的函數,可以看之前的相關文章。
estrndup 定義
<code><span>#define estrndup(s, length) _estrndup((s), (length) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC)</span></code>
_estrndup 定義
<code> ZEND_API <span>char</span> *_estrndup(<span>const</span><span>char</span> *s, uint length ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) { <span>char</span> *p; <span>#ifdef ZEND_SIGNALS</span> TSRMLS_FETCH(); <span>#endif</span> HANDLE_BLOCK_INTERRUPTIONS(); p = (<span>char</span> *) _emalloc(length+<span>1</span> ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_ORIG_RELAY_CC); <span>if</span> (UNEXPECTED(p == NULL)) { HANDLE_UNBLOCK_INTERRUPTIONS(); <span>return</span> p; } <span>memcpy</span>(p, s, length); p[length] = <span>0</span>; HANDLE_UNBLOCK_INTERRUPTIONS(); <span>return</span> p; }</code>
可以自行搜尋關於 _emalloc 等相關函數定義。
以上就介紹了php擴充開發筆記(6)ZVAL_STRING 和 ZVAL_STRINGL,包含了方面的內容,希望對PHP教學有興趣的朋友有幫助。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

使用Java的String.valueOf()函數將基本資料型別轉換為字串在Java開發中,當我們需要將基本資料型別轉換為字串時,常見的方法是使用String類別的valueOf()函數。這個函數可以接受基本資料類型的參數,並傳回對應的字串表示。在本文中,我們將探討如何使用String.valueOf()函數進行基本資料型別轉換,並提供一些程式碼範例來

char陣列轉string的方法:可以透過賦值來實現,使用{char a[]=" abc d\0efg ";string s=a;}語法,讓char陣列對string直接賦值,執行程式碼即可完成轉換。

使用Java的String.replace()函數替換字串中的字元(字串)在Java中,字串是不可變的對象,這意味著一旦創建了一個字串對象,就無法修改它的值。但是,你可能會遇到需要替換字串中的某些字元或字串的情況。這時候,我們可以使用Java的String類別中的replace()方法來實作字串的替換。 String類別的replace()方法有兩種重

大家好,今天跟大家分享java基礎之String。 String類別的重要性就不必說了,可以說是我們後端開發用的最多的類,所以,很有必要好好聊聊它。

使用Java的String.length()函數取得字串的長度在Java程式設計中,字串是一種非常常見的資料類型,我們經常需要取得字串的長度,即字串中字元的個數。在Java中,我們可以使用String類別的length()函數來取得字串的長度。下面是一個簡單的範例程式碼:publicclassStringLengthExample{publ

在Golang程式設計中,byte、rune和string類型是非常基礎、常見的資料型別。它們在處理字串、檔案流等資料操作時發揮著重要作用。而在進行這些資料操作時,我們通常需要對它們進行相互的轉換,這就需要掌握一些轉換技巧。本文將介紹Golang函數的byte、rune和string類型轉換技巧,旨在幫助讀者更好地理解這些資料類型,並能夠熟練地在程式設計實踐中應用

如何在Zend框架中使用ACL(AccessControlList)進行權限控制導言:在一個Web應用程式中,權限控制是至關重要的功能。它可以確保使用者只能存取其有權存取的頁面和功能,並防止未經授權的存取。 Zend框架提供了一種方便的方法來實現權限控制,即使用ACL(AccessControlList)元件。本文將介紹如何在Zend框架中使用ACL

PHP實作框架:ZendFramework入門教學ZendFramework是PHP開發的開源網站框架,目前由ZendTechnologies維護,ZendFramework採用了MVC設計模式,提供了一系列可重複使用的程式碼庫,服務於實作Web2.0應用程式和Web服務。 ZendFramework深受PHP開發者的歡迎與推崇,擁有廣泛
