PHP 扩展 - 字符串连接

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

你可能感兴趣的:(PHP 扩展 - 字符串连接)