貌似 PHP7 中刪除了 add_string_to_string
方法,網上找了一遍沒找到,后來翻了一下源代碼,發現字符串連接符的方法 concat_function
,該方法接受 3 個參數,分別是輸出結果 zval *
,第一個 zval *
,第二個 zval *
,因此可以如下這樣寫:
zval t;
zval result;
ZVAL_STRINGL(&t, "", 0); // 目標字符串
ZVAL_STRINGL(&t, "Hello ", sizeof("Hello ") - 1);
concat_function(&result, &result, &t); // result 結果為 "Hello "
ZVAL_STRINGL(&t, "World", sizeof("World") - 1);
concat_function(&result, &result, &t); // result 結果為 "Hello World"
zval_ptr_dtor(&t); // 釋放
如果只需要簡單擴展一下 zend_string
的長度,比如 AZALEA 項目中需要給路徑字符串最后增加一個斜杠 /,可以使用 zend_string_extend
方法:
zend_string *baseUri;
baseUri = zend_string_init("foo", sizeof("foo") - 1, 0);
size_t len = ZSTR_LEN(baseUri);
zend_string_extend(baseUri, len + 1, 0); // zend_string 長度增加 1
ZSTR_VAL(baseUri)[len] = '/'; // 賦值
ZSTR_VAL(baseUri)[len + 1] = '\0'; // 很重要,否則報 not zero-terminated 錯誤