php获取字符串扩展,PHP7扩展开发之字符串处理

本文深入探讨了PHP7扩展开发中的字符串处理,通过示例代码展示了如何在扩展中实现字符串操作,包括比较和拼接。文章详细解释了`strlen`和`substr`函数的使用,以及如何利用`zend_string`结构和相关宏进行字符串操作。通过阅读,读者可以了解到PHP扩展开发中的字符串处理技巧和方法。
摘要由CSDN通过智能技术生成

标签:

本文和大家分享的主要是PHP7扩展开发中字符串的处理相关知识,希望通过本文的分享能帮助大家更好的学习php。

这次,我们来看看字符串在PHP扩展里面如何处理。

示例代码如下:

$len = strlen($prefix);

$substr = substr($string, 0, $len);

if ($substr != $prefix) {

return $prefix." ".$string;

} else {

return $string;

}

}

echo str_concat("hello", "word");echo "\n";echo str_concat("hello", "hello bo56.com");echo "\n";?>

上面的str_concat方法实现了如下功能:

1、当字符串不包含指定前缀字符串时,把前缀字符串和被检测字符合并返回。

2、当字符串包含指定前缀字符串时,原样返回。

我们将使用PHP扩展的方式实现str_concat功能。

代码

实现str_concat方法

str_concat方法的PHP扩展源码:

PHP_FUNCTION(str_concat)

{

zend_string *prefix, *subject, *result;

zval *string;

if (zend_parse_parameters(ZEND_NUM_ARGS(), "Sz", &prefix, &string) == FAILURE) {

return;

}

subject = zval_get_string(string);

if (zend_binary_strncmp(ZSTR_VAL(prefix), ZSTR_LEN(prefix), ZSTR_VAL(subject), ZSTR_LEN(subject), ZSTR_LEN(prefix)) == 0) {

RETURN_STR(subject);

}

result = strpprintf(0, "%s %s", ZSTR_VAL(prefix), ZSTR_VAL(subject));

RETURN_STR(result);

}

代码说明

zend_string是PHP7新增的结构。结构如下:

struct _zend_string {

zend_refcounted_h gc; /*gc信息*/

zend_ulong h; /* hash value */

size_t len; /*字符串长度*/

char val[1]; /*字符串起始地址*/

};

在 Zend/zend_string.h 提供了一些zend_string处理的一些方法。

ZSTR_ 开头的宏方法是zend_string结构专属的方法。主要有如下几个:

#define ZSTR_VAL(zstr) (zstr)->val

#define ZSTR_LEN(zstr) (zstr)->len

#define ZSTR_H(zstr) (zstr)->h

#define ZSTR_HASH(zstr) zend_string_hash_val(zstr)

ZSTR_VAL ZSTR_LEN ZSTR_H 宏方法分别对应zend_string结构的成员。ZSTR_HASH是获取字符串的hash值,如果不存在,就调用hash函数生成一个。

代码中故意把第二个参数转换成zval。主要是为了展现zend为我们提供了一些列的操作方法。如,zval_get_string, zend_binary_strncmp。

这些方法在 Zend/zend_operators.h 文件中。

来源:博学无忧

标签:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值