php获取字符串扩展,PHP7扩展开发之字符串处理
標簽:
本文和大家分享的主要是PHP7擴展開發(fā)中字符串的處理相關知識,希望通過本文的分享能幫助大家更好的學習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?文件中。
來源:博學無憂
標簽:
總結
以上是生活随笔為你收集整理的php获取字符串扩展,PHP7扩展开发之字符串处理的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: r软件官方下载 linux,r语言下载安
- 下一篇: 带分数 - 蓝桥杯
