貌似 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 错误