PHP7扩展开发之字符串处理
2016-11-28 12:14
267 查看
前言
这次,我们来看看字符串在PHP扩展里面如何处理。示例代码如下:
<?php function str_concat($prefix, $string) { $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功能。
代码
基础代码
这个扩展,我们将在say扩展上增加 str_concat 方法。say扩展相关代码大家请看这篇博文。PHP7扩展开发之hello word 文中已经详细介绍了如何创建一个扩展和提供了源码下载。实现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文件中。
源码下载
tar.gz格式下载zip格式下载
原文链接:PHP7扩展开发之字符串处理
相关文章推荐
- PHP7扩展开发之字符串处理
- PHP7扩展开发之类型处理
- PHP7扩展开发之数组处理
- 常见开发字符串处理
- 二次开发图片浏览系统应用Lightbox image viewer 2.03a并带javascript的字符串处理
- Android开发_字符串处理类-TextUtils类
- javaweb开发中一些字符串的处理记录
- iOS开发章节——C++字符串处理函数介绍
- WinHack的开发技术经验(1)-使用 Unicode 作为内部字符串处理
- 让你提前认识软件开发(10):字符串处理函数及异常保护
- 你还在费劲的处理javascript字符串吗? $.format扩展
- 串的处理 在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下: 1. 把每个单词的首字母变为大写。 2. 把数字与字母之间用下划线字符(_)分
- IOS开发之字符串处理
- SQL开发应用实例存储过程——各种字符串分拆处理函数
- Building Coder(Revit 二次开发) - 可扩展存储处理字典
- 【linux c开发】strtok字符串处理实例
- Firefox扩展开发笔记 - ajax返回乱码字符的处理
- 当C++遇到IOS应用开发---字符串处理
- 处理Camel Case字符串的切分——Desktop Search 开发笔记【经验积累】
- IOS开发笔记-字符串转换为日期时间存在时差问题的处理